Autor Zpráva
pexxxik
Profil
Dobrý den,
mám takovýto kód
<?php
 $x = "name='pexxxik'parametr2='hodnota2'";
  echo ereg_replace("name='(.+?)'", "\\1", $x);
 ?>

Jde o to, v textovém řetězci mám atributy a k němu hodnoty, a potřebuje je dostat do proměnných. Tento výstup však vrací: pexxxik'parametr2='hodnota2. Jenže já potřebuji aby vracel jen: pexxxik. Nevíte kde je chyba?
Radek9
Profil
Ereg funkce jsou zastaralé, použij preg (už se to tu konec konců dnes jednou psalo).
Zkus to takhle:
<?php
$x = "name='pexxxik'parametr2='hodnota2'";
preg_match_all("/(.*)\=\'(.*)\'/U", $x, $y);
print_r($y);
?>
Popřípadě si pak to pole nějak reorganizuj.
pexxxik
Profil
Jj, to asi jo, ale myslím, že funkce ereg*() jsou mnohem rychlejší, ne? Také než budou na servery nainstalovány PHP verze 5.3 a vyšší, tak to bude ještě chvíli trvat...
No takhle mi to úplně nevyhovuje, protože kdyby se přeházeli hodnoty s atributy (nebo se nějaká vynechala), tak by se změnili čísla u hodnot a toho nechci docílit. Ale jinak děkuji za návrh, posunul mě v řešení zas o kus dál.
Nevíte někdo proč ereg_replace dělá takovou chybu? Jestli to tedy chyba je?
Radek9
Profil
pexxxik:
Také než budou na servery nainstalovány PHP verze 5.3 a vyšší, tak to bude ještě chvíli trvat…
Toho bych se nebál. Na free serverech se to děje celkem rychle a na placených je to samozřejmost.

protože kdyby se přeházeli hodnoty s atributy
Proto jsem psal, aby sis to přeházel. Třeba takhle:
$z = array();
for($i=0;$i<count($y[0]);$i++){
  $z[$y[1][$i]] = $y[2][$i];
}
Tori
Profil
pexxxik:
Jestli nutně chcete ereg_replace, tak třeba takhle:
ereg_replace("name='([^']+)?'(.)+", "\\1", $x);

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: