Autor Zpráva
GamerX
Profil
Ahoj dělam si mini-chat nyní si tam přídávám smajlíky ale mam jich 159 a ja nechci každy smailjik definovat pro str_replace a tak to chci nějak narvat do funkce for() ale už jsem skoušel mnoho spůsobů ale stále mí žadný nejde zde jsem skoušel jeden:

                $find=array
                (
                    for($i = 0;$i < 158;$i++) {
                        "*$i*",
                    }
                  "*159*"
                );
                $replace_with=array
                (
                     for($i = 0;$i < 158;$i++) {
                        "<img src=\"styles/images/smiles/$i.gif\" alt=\"$i\" />",
                    }
                  "<img src=\"styles/images/smiles/159.gif\" alt=\"159\" />"
                );
skoušel jsem i dat str_replace přímo do for() aby nemusel definovat a vše by se vyřešilo přímo tam akorát to mi hazelo strašne guláše...
juriad
Profil
str_replace bere jako argumenty i pole, můžeš tedy převést najednou všechny smajlíky.
Chceš tedy nahradit sekvenci *číslo* za <img src="styles/images/smiles/číslo.gif" alt="číslo" />" pro každé číslo?

Pokud ano, jsou vhodnější regulární výrazy:
preg_replace('/\*(\d+)\*/', '<img src="styles/images/smiles/\1.gif" alt="\1" />', $text);
Kde:
\* znamená *
\d je libovolná číslice; \d+ je posloupnost alespoň jedné číslice
(...) závorky slouží k zapamatování
/.../ lomítka jsou jen ohraničení výrazu
V části nahrazení má \1 význam 1. zapamatované části.
RockFire
Profil
GamerX:
Pro těch 159 takto:
$find=array();
$replace_with=array();
for($i = 0;$i <= 159;$i++){
  $find[] = "*$i*";
  $replace_with[] = "<img src=\"styles/images/smiles/$i.gif\" alt=\"$i\" />";
}
  
echo str_replace($find,$replace_with,$text);

A pokud by ti stačilo nahradit sekvenci *číslo*, jak psal juriad, tak takto:
echo preg_replace("/\*([0-9]+)\*/","<img src=\"styles/images/smiles/$1.gif\" alt=\"$1\" />",$text);
GamerX
Profil
Mockrát děkuji
Kcko
Profil
A co se stane napíšu-li *4545454417* ;-) bude tam neexistující obrázek?
str_replace mi přijde vhodnější.
1Pupik1989
Profil
Nebo si upravit regulární výraz.

Třeba namátkově:

$regex = '~\*(?:[0-9]{1,2}|1[0-4][0-9]|15[0-8])\*~';
RockFire
Profil
Kcko:
Proto jsem mu napsal dvě varianty ;)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: