PHP 正在编辑深度未知的多维数组
PHP editing multi dimensional array with unknown depth
我有一个多维数组,可以有 N 层深。我想操纵最终数组(下面示例中的第 2 级)我们知道它是递归函数中的最终数组,当它找到键 'a'.
我想向这个数组添加一个新键,比如 'c' 并且 'c' 的值将使用 'a' 和 'b'[= 的值来计算13=]
我可以编写一个递归函数来循环数组,没问题,但不确定如何 return 一个新键 'c' 和数据到最终数组。
Array
(
[level1] => Array
(
[level2_a] => Array
(
[a] => 786578
[b] => 34450
),
[level2_b] => Array
(
[a] => 786578
[b] => 34450
)
)
)
我已经尝试了以下但无法得到它 return 新数据,它只是 return 原始数组。
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);
}
}
}
}
您即将实现您的目标,唯一需要做的更改就是将引用也传递给 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);
我有一个多维数组,可以有 N 层深。我想操纵最终数组(下面示例中的第 2 级)我们知道它是递归函数中的最终数组,当它找到键 'a'.
我想向这个数组添加一个新键,比如 'c' 并且 'c' 的值将使用 'a' 和 'b'[= 的值来计算13=]
我可以编写一个递归函数来循环数组,没问题,但不确定如何 return 一个新键 'c' 和数据到最终数组。
Array
(
[level1] => Array
(
[level2_a] => Array
(
[a] => 786578
[b] => 34450
),
[level2_b] => Array
(
[a] => 786578
[b] => 34450
)
)
)
我已经尝试了以下但无法得到它 return 新数据,它只是 return 原始数组。
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);
}
}
}
}
您即将实现您的目标,唯一需要做的更改就是将引用也传递给 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);