Přidání parent ukazatelů do rekurzivního PHP pole. rubrika: Programování: PHP
Mějme pole:
$x['a']['b']['c']['d']['e']='y'; $x['aaa']='FirstLevel';
Toto pole nějak rekurzivně zpracovávám stylem:
function Rekurze($arr) { foreach ($arr AS $key =>$val) { foo($key, $val) is_array($val) Rekuze($val); } }
tj. klasicky odebírám prvky od rootu pole.
Ale bohužel bych se někdy potřeboval mrknout dopředu - co již bylo.
Proto bych si do zavedl pole zavedl ukazatel na parent prvek ... tj. pole bych prohnal nějakou funkcí aby vzniklo toto:
$x['a']['b']['c']['d']['e']='y'; $x['aaa']='FirstLevel'; $x['a']['_parent'] = &$x; $x['a']['b']['_parent'] = &$x['a']; $x['a']['b']['c']['_parent'] = &$x['a']['b']; $x['a']['b']['c']['d']['_parent'] = &$x['a']['b']['c'];
A potom klidně při zpracování mohu udělat:
function foo($key, $val) { .... if ($key=='e') echo $arr['_parent']['_parent']['_parent']['_parent']['aaa']; }
V javascriptu tuto techniku používám a ok. Ale vím, že PHP obecně moc nemá rádo proměnné odkazem, důvěru nebudí ani to, že var_export nad $x udělá Fatal Error (i když naopak serialize se zdá velmi hezky udělaný).
Tak jsem se chtěl zeptat zda někdo takovou techniku nad většími poli (počet všech zamořených prvků řádově stovky) používá.
Potřebuješ bezpodmínečně, aby to bylo pole? Objektové řešení by bylo totiž řádově snazší, vystačil by sis s nějakou třídou Node a eventuálně nějakým iterátorem k ní (podle potřeby a účelu toho všeho).
Řešení přes pole bude asi vždycky těžkopádné.
Pro zobrazení všech 4 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře