将所有子值合并回父多维数组php

时间:2015-10-29 14:25:37

标签: php arrays multidimensional-array

我有一个多维数组,我需要将所有子值合并回其父级。

说我有这样的数组:

array(2) {

      [XY] =>
      array(3) {
                [A]=> 20
                [B]=> 30
                [2]=>
                array(2) {
                          [0]=> 1
                          [1]=> 2
                         }
               }
      [YZ] =>
      array(3) {
                [A]=> 60
                [B]=> 50
                [2]=>
                array(2) {
                          [0]=> 3
                          [1]=> 4
                         }
               }
}

我想要一个像这样的输出:

array(2) {

      [XY] =>
      array(4) {

                [A]=> 20
                [B]=> 30
                [2]=> 1
                [3]=> 2  
               }
      [YZ] =>
      array(4) {

                [A]=> 60
                [B]=> 50
                [2]=> 3
                [3]=> 4                             
               }
}

我该怎么做?

2 个答案:

答案 0 :(得分:0)

这是你的解决方案,它的工作是递归的,并将任何孩子交给元父(lvl 1 parent)注意:结束级别Childs给lvl 1 parent

    function giveChildToParentLevel($array)
    {

       $countOfArray = count($array);

       foreach($array as $key=>$value)
       {

           if(is_array($value))
           {

               $childitems = giveChildToParentLevel($value);

               if(count($childitems) > 0 )
               {
                   unset($array[$key]);
                   $i = 0;
                   foreach($childitems as $child)
                   {
                       if($i == 0)
                             $array[$key] = $child;
                       else
                            $array[$key.$i] = $child;

                       $i++;
                   }
               }


           }


       }

        return $array;
    }

    $array = //your array;
    foreach($array as $key=>$value)
    {
        $array[$key] = giveChildToParentLevel($value);
    }
    print_r($array);

答案 1 :(得分:0)

此代码会将整个子array合并到其主父数组中,您可以根据需要执行类似的操作。

foreach($allDataInarray as $key => $data) {
    $array_keys = array_keys($data);
    foreach($array_keys as $key_value) {
        if(is_array($data[$key_value])) {
            foreach($data[$key_value] as $sub_key => $sub_data) {
                $allDataInarray[$key][$sub_key] = $sub_data;   
            }
            unset($allDataInarray[$key][$key_value]);
        }
    }
}

注意:这是用于2D阵列。