【发布时间】:2016-03-08 08:46:21
【问题描述】:
我有以下函数来对多维数组值求和。
// summing values of multidimensional array
function getSum($array, $path = array()){
// process second argument:
foreach ($path as $key) {
if (!is_array($array) || !isset($array[$key])) {
return 0; // key does not exist, return 0
}
$array = $array[$key];
}
if(is_array($array)) {
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
$sum = 0;
foreach ($iterator as $key => $value) {
$sum += $value;
}
} else{
$sum = $array;
}
return $sum;
}
我正在使用这样的功能:
$array = array();
$array['one']['green'][20] = 20;
$array['one']['blue'][20] = 5;
$array['one']['blue'][30] = 10;
getSum($array,['one','green']); // 20
getSum($array,['one','blue',20]); // 5
现在,如果我不想设置任何特殊颜色,我会遇到问题,因为我希望该脚本将所有颜色的类别 20 中的所有值相加。
所以它应该像这样工作:
getSum($array,['one','*',20]); // 25
感谢您的帮助!
这是我的数组的示例:
Array (
[1] => Array (
[AREA I] => Array (
[20] => 1
[25] => 0
[30] => 0 )
[AREA II] => Array (
[20] => 0
[30] => 0 )
[AREA III] => Array (
[20] => 2
[30] => 0 )
[AREA IV] => Array (
[20] => 0
[30] => 3 )
[AREA V] => Array (
[20] => 4
[25] => 0
[30] => 3 )
)
[2] => Array (
[AREA I] => Array (
[20] => 0
[30] => 0 )
[AREA II] => Array (
[20] => 0
[30] => 0 )
)
)
这是我的getSum 通话示例:
getSum($visitsandinfosact,['*','*',20]); // should print 7
【问题讨论】:
-
这样的数组
$array['one'] = 10; $array['one']['green'] = 20;不能存在。$array['one']要么是数组要么是标量值 -
@splash58:我编辑了我的代码示例。
标签: php arrays recursion multidimensional-array