Giống như Jon đã đề xuất (và đang yêu cầu phản hồi cho trò chuyện), một bí danh tham chiếu/biến hữu ích ở đây để duyệt qua ngăn xếp động. Vì vậy, điều duy nhất cần thiết là lặp qua tất cả các khóa con và cuối cùng đặt giá trị:
$rv = &$target;
foreach(explode('.', $key) as $pk)
{
$rv = &$rv[$pk];
}
$rv = $value;
unset($rv);
Tham chiếu này có thể sử dụng ngăn xếp thay vì đệ quy thường thô hơn. Ngoài ra, mã này ngăn không ghi đè các phần tử hiện có trong mảng $target
. Full dụ:
$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);
Output:
array(1) {
["Main"]=>
array(2) {
["Sub2"]=>
string(4) "Test"
["Sub"]=>
array(1) {
["SubOfSub"]=>
string(9) "SuperData"
}
}
}
Demo
Câu hỏi liên quan (s):
$ tmp_array = phát nổ ('.', $ Your_string); Sau đó, lặp qua $ tmp_array và tạo mảng $ k của bạn – djot
Hãy xem http://php.net/manual/en/function.explode.php và http://php.net/manual/en/function.implode .php và bạn gần như ở nhà. – Cyclonecode
Câu hỏi tương tự, chỉ dành cho đối tượng 'stdClass', không phải mảng: [Array to object] (http://stackoverflow.com/q/11188563/367456). – hakre