Chyba v procházení polí
Školení, která pořádám
PHP 5.2.1 obsahuje chybu při kombinování různých způsobů pro procházení pole. Jde o to, že po projití pole konstrukcí foreach se přesune interní ukazatel pole, takže např. funkce key nevrátí klíč prvního prvku, ale null.
Chyba dosud není opravena, přestože vydání verze 5.2.2 je na spadnutí, proto stojí za zvážení sáhnout do vlastního kódu a po průchodu pole volat funkci reset.
Diskuse
Petr:
Tak 5.2.2 byla vydaná, ale v seznamu změn o opravě tohoto není zmínka. JSem jen slepý nebo to tam není opraveno?
Chyba skutečně není opravena. Proto jsem v článku také upozornil na to, že stojí za zvážení upravit vlastní kód.
Tak tahle chyba mi nedávno pěkně zkomplikovala život. Po nasazení eshopu na novější verzi php (ano 5.2.1), se mi některé smyčky zacyklily.
Nevěděl jsem čím to je, ale podezříval jsem kompilátor resp. interpret. //ikdyž nám ve škole vtloukají do hlavy, že kompilátor je bezchybný a chyby dělá jenom programátor. LOL.
// workaround: pouziti while
public static function findKeyInArray($key, $array) {
reset($array);
while (list($k, $v) = each($array)) {
if ($k == $key)
return true;
}
return false; // not found
}
qwe:
Proč tak složitě, nestačí fce array_key_exists?
echo:
Zrejme preto, ze je paranoidne nedovercivy.Radsej si napisal vlastnu funkciu :p
Diskuse je zrušena z důvodu spamu.