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.
  1. <?  
  2. $darabok=explode('align="rnd"',$code);  
  3. $code=array_shift($darabok);  
  4. foreach($darabok as $darab)  
  5. {  
  6.   $code.='align="'.$align[rand(0,3)].'"';  
  7.   $code.=$darab;  
  8. }  
  9. ?>  
pp
2

<Nincs cím>

Anonymous · 2006. Már. 4. (Szo), 11.46
Valami ilyesmi kene inkabb
  1. $pattern = '(align="(rnd)")ie';  
  2. $result = preg_replace( $pattern"replace_rnd( '\\2')"$code);  
  3.   
  4. function replace_rnd( $align)  
  5. {  
  6.     return $align[rand(0,3)];  
  7. }  
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!