| 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: 11 let
|
|||
0