ugrás a tartalomhoz

str_replace, vagy van jobb?

chronos · 2006. Már. 3. (P), 22.28
szasztok
a gondom:
egy olyan dolgot próbálnék megoldani, hogy egy html filet megnyit a php, és az összes '<div align="rnd">' előfordulást lecseréli '<div align="'.$align[rand(0,3)].'">'-ra... az align egy array, négy elemmel:
0 => "left"
1 => "right"
2 => "center"
3 => "justify"
tehát az összes "rnd" igazítású divnek MÁS igazítást kéne megadni... ezt hogy lehet?
mert én ezt próbáltam:
$code = str_replace('align="rnd"','align="'.$align[rand(0,3)].'"',$code);
de ez mindenhova ugyanazt az igazítást rakja be...
 
1

kiértékelés sorrendje nem az amire gondolsz!

pp · 2006. Már. 3. (P), 23.06
Mivel az értelmező a $align[rand(0,3)] kifejezés értékét számolja ki elsőnek és azt teszi be az összes előforudlási helyre.
(mivel kicsit pilledt vagyok, csak egy favágó megoldás jut eszembe):
Feldaraboljuk a stringet és szépen végigmegyünk rajta.

<?
$darabok=explode('align="rnd"',$code);
$code=array_shift($darabok);
foreach($darabok as $darab)
{
  $code.='align="'.$align[rand(0,3)].'"';
  $code.=$darab;
}
?>
pp
2

<Nincs cím>

Anonymous · 2006. Már. 4. (Szo), 11.46
Valami ilyesmi kene inkabb

$pattern = '(align="(rnd)")ie';
$result = preg_replace( $pattern, "replace_rnd( '\\2')", $code);

function replace_rnd( $align)
{
    return $align[rand(0,3)];
}
3

<Nincs cím>

Anonymous · 2006. Már. 4. (Szo), 11.47
jaj, dehogyis functionban ne $align legyen a kepott valtozo :)
4

thx

chronos · 2006. Már. 4. (Szo), 12.11
kösz a segítséget, megoldottam!