Autor | Zpráva | ||
---|---|---|---|
nethor Profil |
#1 · Zasláno: 26. 12. 2015, 20:01:47
Zdravím,
řeším tento problém: Multidimenzi. poli potřebuji přiřadit hodnotu na správné místo. V příkladu konkrétně $MultiArr["Tree"]["Branch"]["Blade"][] = "Green" ;
Jediné řešení, které mi funguje je s použitím fce eval(); ta je ale mnohdy kritizovaná. Jde to i jinak? $MultiArr = array(); function SetVal($Value,$Way){ global $MultiArr ; $Eval = "\$MultiArr[".implode("][", $Way)."][] = \$Value ;"; eval($Eval) ; return $MultiArr ; } SetVal("Green",array("Tree","Branch","Blade")) ; ------ dump ------- array(1) { ["Tree"]=> array(1) { ["Branch"]=> array(1) { ["Blade"]=> array(1) { [0]=> string(5) "Green" } } } } |
||
Dan Charousek Profil |
Toto by ti mohlo pomoct.
Užití: $val = &getByKeys($MultiArr, ['Tree', 'Branch', 'Blade']); $val = "Green" var_dump($MultiArr); Trváš-li na té pomocné funkci SetVal() , tak nepoužívej globals, ale předej jen referenci na pole a té funkci zavolej getByKeys()
Až po odeslání jsem si všiml, že to chceš přidat jako prvek do pole, ta úprava je samozřejmě triviální, tak jen upozorňuji na to, že v mé ukázce je pod klíčem Blade string "Green" |
||
nethor Profil |
#3 · Zasláno: 26. 12. 2015, 21:26:34
Dan Charousek:
Děkuju, tohle jsem hledal. Zásadní bylo použití reference, to moc neznám => používám zřídka. Globals jsem použil v příspěvku jen pro zjednodušení, fci používám jako metodu ve třídě. Upravil jsem ještě vytvoření subpole při neexistujícím klíči, ve finále vypadá takhle: function SetParseArr($Value) { $Iter = &$this->ParseArr; foreach ($this->Tag as $key) { if (!isset($Iter[$key])) { $Iter[$key] = array(); } $Iter = &$Iter[$key]; } $Iter[] = $Value ; } |
||
Časová prodleva: 9 let
|
0