Tak jak zasugerował Jon (i pyta o opinie na czacie), alias referencyjny/zmienny jest pomocny w przejściu przez stos dynamicznych kluczy. Jedyne więc potrzebna jest iteracyjne nad wszystkie podklucze i ostatecznie ustawić wartość:
$rv = &$target;
foreach(explode('.', $key) as $pk)
{
$rv = &$rv[$pk];
}
$rv = $value;
unset($rv);
Odniesienie umożliwia użycie stosu zamiast rekurencji, która jest na ogół bardziej chude. Ponadto ten kod zapobiega zastępowaniu istniejących elementów w tablicy $target
. Pełny przykład:
$key = "Main.Sub.SubOfSub";
$target = array('Main' => array('Sub2' => 'Test'));
$value = "SuperData";
$rv = &$target;
foreach(explode('.', $key) as $pk)
{
$rv = &$rv[$pk];
}
$rv = $value;
unset($rv);
var_dump($target);
wyjściowa:
array(1) {
["Main"]=>
array(2) {
["Sub2"]=>
string(4) "Test"
["Sub"]=>
array(1) {
["SubOfSub"]=>
string(9) "SuperData"
}
}
}
Demo
pokrewne Pytanie (a):
$ tmp_array = explode ('.', $ Your_string); Następnie wykonaj iterację $ tmp_array i utwórz tablicę $ k – djot
Zobacz http://php.net/manual/en/function.explode.php i http://php.net/manual/en/function.implode .php i jesteś prawie w domu. – Cyclonecode
Podobne pytanie, tylko dla obiektu 'stdClass', a nie tablicy: [Array to object] (http://stackoverflow.com/q/11188563/367456). – hakre