Zadejte hledaný výraz...

Podivné chování PHP?

Honza
verified
rating uzivatele
(17 hodnocení)
14. 6. 2009 11:08:47
Může mi někdo vysvětlit, proč následující PHP kód vypíše "1b 2b 2b" místo "1b 2b 3b"?
Když v druhém cyklu taky použiju &, už to funguje jak má. Ale správně by tam nemusel být.
$items = array('1', '2', '3');
foreach ($items as &$item) {
$item .= 'b';
}
foreach ($items as $item) {
print "$item ";
}
14. 6. 2009 11:08:47
https://webtrh.cz/diskuse/podivne-chovani-php/#reply320903
Václav Hodek
verified
rating uzivatele
(9 hodnocení)
14. 6. 2009 11:20:48
No to je docela logické :).
V prvním cyklu si vytváříš referenci na prvek pole $items a když doběhne první cyklus, tak $item odkazuje na to 3B. Díky tomu ti další cyklus nevkládá hodnoty do $item, ale protože je to reference, takže přepisuje poslední položku pole $items.
Řešení jsou v podstatě dvě... buď za tím prvním foreach na konci smažeš referenci, tj. přidáš za to asi unset($item), PHP moc neznám... a nebo nepoužiješ v druhém foreach to $item, ale třeba $item2.
14. 6. 2009 11:20:48
https://webtrh.cz/diskuse/podivne-chovani-php/#reply320902
Honza
verified
rating uzivatele
(17 hodnocení)
14. 6. 2009 11:21:24
Tak už jsem si to našel: http://www.php.net/manual/en/control-structures.foreach.php#46348
---------- Doplňující příspěvek odeslán v 11:22 ----------
Napsal vaclav.hodek;304763
...
Díky, ale zmátlo mě to :)
Kdyby PHP tu referenci po skončení cyklu odstranilo samo, bylo by po problému.
14. 6. 2009 11:21:24
https://webtrh.cz/diskuse/podivne-chovani-php/#reply320901
Petr Soukup
verified
rating uzivatele
(5 hodnocení)
14. 6. 2009 12:04:15
Použít implode by ale určitě bylo hezčí :D
14. 6. 2009 12:04:15
https://webtrh.cz/diskuse/podivne-chovani-php/#reply320900
Buď si hlídej referenční proměnné (tedy unsetuj) a nebo radši foreach s referencí nepoužívej (pro zápis můžeš použít tvar $array).
14. 6. 2009 12:05:04
https://webtrh.cz/diskuse/podivne-chovani-php/#reply320899
Pro odpověď se přihlašte.
Přihlásit