好的,我有一个包含以下元素的数组:
$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)
您将不得不使用引用来遍历目标数组:
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)
| 归档时间: |
|
| 查看次数: |
4496 次 |
| 最近记录: |