Como Jon sugirió (y al solicitar comentarios en el chat), un alias de referencia/variable es útil aquí para recorrer la pila dinámica de claves. Así que lo único que se necesita es iterar sobre todas las subclaves y, finalmente, establecer el valor:
$rv = &$target;
foreach(explode('.', $key) as $pk)
{
$rv = &$rv[$pk];
}
$rv = $value;
unset($rv);
La referencia hace que sea posible el uso de una pila en lugar de recursividad que es generalmente más delgado. Además, este código evita sobrescribir elementos existentes en la matriz $target
. Ejemplo completo:
$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);
Salida:
array(1) {
["Main"]=>
array(2) {
["Sub2"]=>
string(4) "Test"
["Sub"]=>
array(1) {
["SubOfSub"]=>
string(9) "SuperData"
}
}
}
Demo
Pregunta (s) relacionada:
$ tmp_array = explode ('.', $ Your_string); Luego itere a través de $ tmp_array y cree su array $ k – djot
Eche un vistazo a http://php.net/manual/en/function.explode.php y http://php.net/manual/en/function.implode .php y estás casi en casa. – Cyclonecode
Pregunta similar, solo para un objeto 'stdClass', no una matriz: [Matriz a objeto] (http://stackoverflow.com/q/11188563/367456). – hakre