php计算从内部数组到外部数组的多维数组

php计算从内部数组到外部数组的多维数组,php,arrays,multidimensional-array,recursiveiterator,Php,Arrays,Multidimensional Array,Recursiveiterator,如何使用PHP递归迭代器解决以下问题 $arr = array( "sum"=>array(2,4,6, "multiply" => array(1,3,5) ), "multiply"=>array(3,3,3, "sum" => array(2,4,6) ), ); 我期待以下答案 (2 + 4 + 6 + ( 1 * 3 * 5) ) = 27; (3 * 3 * 3 * (2 + 4 + 6)) = 324; 部分代码到目前为止 $ca

如何使用PHP递归迭代器解决以下问题

$arr = array(
    "sum"=>array(2,4,6, "multiply" => array(1,3,5) ),
    "multiply"=>array(3,3,3, "sum" => array(2,4,6) ),
);
我期待以下答案

(2 + 4 + 6 + ( 1 * 3 * 5) ) = 27; 
(3 * 3 * 3 * (2 + 4 + 6)) = 324;

部分代码到目前为止

   $calc = new ArrayObject($arr);
   $MRI = new RecursiveIteratorIterator(new      MyRecursiveIterator($calc), 1);
   foreach ($MRI as $key=>$value) {
   echo " Current Depth: ". $MRI->getDepth() . "\n"; 
   echo $key . " : " . $value . "\n";
   $currentDepth = $MRI->getDepth();
   for ($subDepth = $currentDepth; $subDepth >= 0; $subDepth--)
   { echo "sub Depth: ". $subDepth . "\n"; 
   $subIterator = $MRI->getSubIterator($subDepth);
   // var_dump($subIterator); } }

您可以这样做,从数组的最里面进行计算。检查

<?php
function f(&$array)
{
    foreach($array as $k => &$v)
    {
        if(is_array($v))
        {
            if(count($v) == count($v, 1))
            {
                unset($array[$k]);
                if($k == 'sum')
                {
                    $v =  array_sum($v);
                    $array[] = $v;

                }elseif($k == 'multiply'){
                    $v = array_product($v);
                    $array[] = $v;
                }else{

                    foreach($v as $vv)
                        $array[] = $vv;
                }
            }else
                f($v);
        }
    }
}

while(count($array) != count($array, 1))
{
    f($array);
}

print_r($array);

简单易用的解决方案:-

$arr = array("sum"=>array(2,4,6, "multiply" => array(1,3,5) ),"multiply"=>array(3,3,3, "sum" => array(2,4,6)));
    foreach($arr as $key => $newarr){
        if($key =="sum"){
            $sum = array_sum($newarr);
            $product = array_product($newarr['multiply']);
            $finalarray[$key] = $sum+$product;
        }elseif($key =="multiply") {
            $product = array_product($newarr);
            $sum = array_sum($newarr['sum']);
            $finalarray[$key] = $sum*$product;
        }
    }
    echo "<pre>"; print_r($finalarray);
$arr=array(“sum”=>array(2,4,6,“multiply”=>array(1,3,5)),“multiply”=>array(3,3,3,“sum”=>array(2,4,6));
foreach($arr作为$key=>$newarr){
如果($key==“sum”){
$sum=数组和($newarr);
$product=array_乘积($newarr['multiply']);
$finalarray[$key]=$sum+$product;
}elseif($key==“乘法”){
$product=阵列产品($newarr);
$sum=array_sum($newarr['sum']);
$finalarray[$key]=$sum*$product;
}
}
回声“;打印费($finalarray);

希望有帮助

请告诉我们你到目前为止的进展情况。花了很长时间,还没弄明白。我仍然在尝试,我很确定斯库齐想让你展示你尝试过的代码。不只是说你已经试过了。到目前为止部分代码..部分代码$计算=新阵列对象($arr)$MRI=新递归迭代器(新MyRecursiveIterator($calc),1);foreach($MRI as$key=>$value){echo“当前深度:”.$MRI->getDepth().“\n”;$echo$key.:“$value.”\n“$currentDepth=$MRI->getDepth();for($subDepth=$currentDepth;$subDepth>=0;$subDepth--){echo“子深度:”.$subDepth.\n”;$sub迭代器=$MRI->GetSubDepth($subDepth);//var_dump($subIterator);}}非常感谢。我使用的是php版本5.4,上面的代码是否会更改为旧版本?同样,这是否适用于更深层次的数组?例如:$arr=array(“sum”=>array(2,4,6),“multiply”=>array(1,3,“sum”=>array(1,5,6),“multiply”=>array(2,2,2,“sum”=>array(4,4,4)),“multiply”=>array(3,3,“sum”=>array(2,4,6));克里斯,评估在最深层次停止。我尝试使用以下数组,但它不起作用$arr=数组(“和”=>数组(2,4,6,“乘”=>数组(1,3,5,“和”=>数组(1,2)),“乘”=>数组(3,3,3,“和”=>数组(2,4,6)),);有吗suggestions@subra现在检查一下,效果很好。精彩的。谢谢,谢谢你,库纳尔。它起作用了。只是好奇,它能在更深层次的阵列中工作吗?例如,$arr=array(“sum”=>array(2,4,6,“multiply”=>array(1,3,“sum”=>array(1,5)),“multiply”=>array(3,3,3,“sum”=>array(2,4,6));根据你的数组结构,它肯定会工作:)@subra$arr=array(“sum”=>array(2,4,6,“multiply”=>array(1,3,“sum”=>array(1,5,6,“multiply”=>array(2,2,2,“sum”=>array(4,4,4);),“multiply”=>array(3,3,“sum”=>array(2,4,6));我试过使用这个数组。它不起作用。可能我需要使用递归循环