Unset položky pole - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

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

Tématické zařazení:

 » Rubriky  » PHP  

 » Rubriky  » Web  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: