我有一个可以N级深度的多维数组。我想操纵最后一个数组(下面例子中的第2级),我们知道它是递归函数中的最后一个数组,当它找到关键字' a'。
我想在这个数组中添加一个新密钥,然后说明' c'以及' c'的价值将使用' a'的值来计算。和' b'
我可以写一个递归函数来循环数组没有问题,但不知道如何返回一个新的密钥' c'和数据到最后的数组。
Array
(
[level1] => Array
(
[level2_a] => Array
(
[a] => 786578
[b] => 34450
),
[level2_b] => Array
(
[a] => 786578
[b] => 34450
)
)
)
我尝试过以下操作,但无法返回新数据,只返回原始数据。
function calculateAverages(&$arr,$key) {
if (is_array($arr) ) {
if (in_array('a',array_keys($arr))) {
//add new data to this array
}else {
foreach($arr as $key => $data) {
calculateAverages($data,$key);
}
}
}
}
答案 0 :(得分:2)
你已经接近实现你的目标只有你必须做的改变就是传递对foreach循环的引用。这里没有密钥的要求所以我删除它。试试这个:
$arr =Array
(
'level1' => Array
(
'level2_a' => Array
(
'a' => 786578,
'b' => 34450,
),
'level2_b' => Array
(
'a' => 786578,
'b' => 34450,
)
)
);
function calculateAverages(&$arr) {
if (is_array($arr) ) {
if (in_array('a',array_keys($arr))) {
$avg = ((array_sum($arr))/2);
$arr['c']=$avg;
}
else {
foreach($arr as &$data) {
calculateAverages($data);
}
}
}
}
calculateAverages($arr);
print_r($arr);