PHP:使用在单独数组中定义的路径设置多维关联数组元素的值

Dan*_*anH 8 php arrays loops

好的,我有一个包含以下元素的数组:

$array['a']['b'][0]['c'];
$array['a']['b'][1]['c'];
$array['a']['d'][0]['c']['c'];
$array['b']['c'];
Run Code Online (Sandbox Code Playgroud)

然后在一个单独的数组中,我定义了这些值的路径:

$structure[0] = array('a','b','#','c');
$structure[1] = array('a','d','#','c','c');
$structure[2] = array('b','c');
Run Code Online (Sandbox Code Playgroud)

最后,我有一个包含值的数组:

$values[0] = array('value0-0','value0-1');
$values[1] = array('value1-0');
$values[2] = array('value2-0');
Run Code Online (Sandbox Code Playgroud)

我正在尝试找到一个简单的函数/循环,它能够将$ values中的值应用于$ structure中定义的$ array的数组路径.

最终结果将是:

$array['a']['b'][0]['c']='value0-0';
$array['a']['b'][1]['c']='value0-1';
$array['a']['d'][0]['c']['c']='value1-0';
$array['b']['c']='value2-0';
Run Code Online (Sandbox Code Playgroud)

在$ values [0]或$ values [1]的情况下,它将能够循环遍历每个值,并将匹配'#'的$ structure元素替换为该特定$值的迭代次数.

这只是一个折腾和编写绘制的递归函数的情况,还是有一个智能构造或PHP函数可以提供更优雅的解决方案?

解:

感谢Mario,我的最终解决方案是:

foreach ($struct as $i=>$keys)
  foreach ($values[$i] as $val) {
    $r = & $array;

    foreach ($keys as $key) {

        if ($key == "#") { $key = $i; }

        $r = & $r[$key];    // move pointer to subarray
    }

    $r = $val;
  }
}
Run Code Online (Sandbox Code Playgroud)

mar*_*rio 5

您将不得不使用引用来遍历目标数组:

function inject($array, $struct, $values) {

    foreach ($struct as $i=>$keys)
    foreach ($values[$i] as $val) {
        $r = & $array;

        foreach ($keys as $key) {

            if ($key == "#") { $key = count($r); }

            settype($r[$key], "array");
            $r = & $r[$key];    // move pointer to subarray
        }

        $r = $val;
    }
Run Code Online (Sandbox Code Playgroud)