PHP编辑深度未知的多维数组

时间:2017-02-15 05:41:22

标签: php recursion pass-by-reference

我有一个可以N级深度的多维数组。我想操纵最后一个数组(下面例子中的第2级),我们知道它是递归函数中的最后一个数组,当它找到关键字' a'。

我想在这个数组中添加一个新密钥,然后说明' c'以及' c'的价值将使用' a'的值来计算。和' b'

我可以写一个递归函数来循环数组没有问题,但不知道如何返回一个新的密钥' c'和数据到最后的数组。

    Array
    (
    [level1] => Array
        (
            [level2_a] => Array
                (
                    [a] => 786578
                    [b] => 34450
                ),

            [level2_b] => Array
                (
                    [a] => 786578
                    [b] => 34450
                )


        )

    )

我尝试过以下操作,但无法返回新数据,只返回原始数据。

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

1 个答案:

答案 0 :(得分:2)

你已经接近实现你的目标只有你必须做的改变就是传递对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);

示例:https://eval.in/737280