$first = array("a", "b" => array("c", "d" => array("e", "f")), "g", "h" => array("f"));
$second = array("b", "d", "f");
$string = "foobar";
Учитывая приведенный выше код, как я могу установить значение в $first
для индексов, определенных в $second
, для содержимого $string
? Это означает, что для этого примера это должно быть $first["b"]["d"]["f"] = $string;
, но содержимое $second
и $first
может иметь любую длину. $second
всегда будет одномерным. Вот то, что я попробовал, но, похоже, не сработало, как планировалось:
$key = "";
$ptr = $first;
for($i = 0; $i < count($second); $i++)
{
$ptr &= $ptr[$second[$i]];
$key = key($ptr);
}
$first[$key] = $string;
Это будет делать $first["f"] = $string;
вместо правильных многомерных индексов. Я думал, что с помощью key
будет найдено местоположение в массиве, включая уровни, которые он уже сдвинул.
Как получить динамический доступ к нужным ключам? Я мог бы справиться с этим, если бы число измерений было статичным.
РЕДАКТИРОВАТЬ: Кроме того, я хотел бы сделать способ, который не использует eval
.