PHP оценивает многомерный массив от внутреннего массива к внешнему массиву

Как решить следующую проблему с помощью PHP RecursiveIteratorIterator?

$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); } }

1

Решение

Вы можете сделать это следующим образом: выполнить вычисления из самой внутренней части массива. Проверить демонстрация.

<?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);

Заметка:

массив перемещения от внешнего к внутреннему
массив перемещения от внутреннего к внешнему

1

Другие решения

Простое и легкое решение: —

$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);

Надеюсь, поможет!

0

По вопросам рекламы [email protected]