Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
PHP
Unset položky pole
20. dubna 2000, 00.00 | Zajímavé, leč logické chování PHP při uvolnění položky z pole..
Při tvorbě jednoho náročnějšího projektu jsem narazil na zvláštní vlastnost PHP. Původně jsem měl za to, že se jedná o chybu. Mýlil jsem se.
Jde o unset (uvolnění) položky z pole.
Po provedení, např. unset($x[1]), se celé pole chová nekorektně vůči funkci count (resp. sizeof) a výpisu pomocí for cyklu. To je ukázáno na druhém ukázkovém výpisu.
Proč? PHP uvolní proměnnou, sníží hodnotu udávající počet prvků v poli, ale zachová klíče. Tj. prvky jsou stále stejně indexovány (původním pořadím) a for cyklem nedosáhneme na poslední prvek, a místo uvolněného prvku dostaneme prázdnou (false) hodnotu.
Řešením je použít výpis uvedený v třetím případě, tj. pomocí each(). Nebo si pole po odstranění prvku nechat znovu setřídit (jak to naznačeno v komentáři). To ovšem zbytečně zatěžuje systém a ne vždy máme dle čeho třídit.
Příklad:
"; echo "
"; // druhy vymazeme unset($x[1]); /*sort($x);*/ // a znovu vypisem // ale pole je ekv. array("0"=>1,"2"=>3,"3"=>4,"4"=>5) // a my projizdime pres hodnotu klice, tj. ptame se postupne // co je pod nulou? ($x[0]==1) // co je pod jednickou ($x[1]==false) // co je pod dvojkou ($x[2]==3) // ... for($i=0; $i"; //count x sizeof -> to same (v tomto pripade) echo "
"; // korektni reseni reset($x); while(list($key,$val)=each($x)) echo $val."
"; ?>
Výstup: 1 2 3 4 5 1 3 4 1 3 4 5 |
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007