Rus*_*ias 22
另一种选择:
$sum = 0;
$array_obj = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
foreach($array_obj as $key => $value) {
if($key == 'pv')
$sum += $value;
}
echo $sum;
Run Code Online (Sandbox Code Playgroud)
更新:我以为我会提到这个方法使用PHP SPL迭代器.
Salathe编辑:
过滤键并对值求和(不编写自定义迭代器)的简单(相对)方法是使用a进行一些过滤RegexIterator,将生成的迭代器转换为数组并array_sum在其上使用方便的函数.这纯粹是一个学术练习,我当然不会提倡它是实现这一目标的最佳方式......但是,它只是一行代码.:)
$sum = array_sum(
iterator_to_array(
new RegexIterator(
new RecursiveIteratorIterator(
new RecursiveArrayIterator($array)
),
'/^pv$/D',
RegexIterator::MATCH,
RegexIterator::USE_KEY
),
false
)
);
Run Code Online (Sandbox Code Playgroud)
fre*_*ley 11
function addPV($array){
$sum = 0;
foreach($array as $key => $a){
if (is_array($a)){
$sum += addPV($a);
}else if($key == 'pv') {
$sum += $a;
}
}
return $sum;
}
Run Code Online (Sandbox Code Playgroud)
基于@Ali Sattari 回答
function sum($v, $w) {
return $v + (is_array($w) ?
array_reduce($w, __FUNCTION__) : $w);
}
Run Code Online (Sandbox Code Playgroud)