按字段

时间:2015-12-10 09:10:21

标签: php arrays multidimensional-array laravel-5

更新 var_export数组版本HERE

我有以下数组,我想根据UNILEVEL值对元素/子元素进行分组:

array( 
    0 => array(
         "member_id" => 3,
         "unilevel" => 1, 
         "children" => array( 
             0 => array( 
                 "member_id" => 4,
                 "unilevel" => 2,
                 "children" => array( 
                     0 => array( 
                         "member_id" => 6,
                         "unilevel" => 3,
                         "children" => array( 
                             0 => array(
                                 "member_id" => 7,
                                 "unilevel" => 4 ) ) ) ) ) 
             1 => array( 
                 "member_id" => 9
                 "unilevel" => 2 ) ) )
    1 => array( 
        "member_id" => 5,
        "unilevel" => 1,
        "children" => array( 
            0 => array( 
                "member_id" => 8,
                "unilevel" => 2,
                "children" => array( 
                    0 => array( 
                        "member_id" => 10,
                        "unilevel" => 3 ) ) ) ) ) ) 

下面的Controller有一个名为groupPerlevel的函数进行分组,但它现在只对第一个父组合,它已经是一个递归函数,我不知道它为什么不把第二个父元素放在上面不完美的分组。

class TestController extends Controller {
    private $group = array();

    private function setGroup($value) {
        $this->group = $this->group + $value;
    }

    private function getGroup() {
        return $this->group;
    }

    public function create()
    {
        $this->groupPerlevel($tree);
        dd($this->getGroup());
    }

    private function groupPerlevel(array $items)
    {
        var_dump($items);
        $grouparr = $this->getGroup();

        $newkey = 0;
        $templevel = 1;

        foreach($items as $key => $val) {
            if($templevel == $val->unilevel) {
                $grouparr[$templevel][$newkey] = $val;
                $this->setGroup($grouparr);
            } else {
                if(isset($grouparr[$val->unilevel][$newkey])) {
                    $count = count($grouparr[$val->unilevel]);
                    $grouparr[$val->unilevel][$count] = $val;
                    $this->setGroup($grouparr);
                } else  {
                    $grouparr[$val->unilevel][$newkey] = $val;
                }
            }

            if(isset($val->children)) {
                $children = $val->children;
                unset($val->children);
                $this->groupPerlevel($children);   
            } 
            $newkey++;
        }
        $this->setGroup($grouparr);
    }
}

以下数组将是我想要的输出。 array(4){ [1] 是UNILEVEL(组),因此所有元素/子元素都应根据其unilevel字段值位于其正确的unilevel组中。但它只对第一个父母进行,第二个父母不进行分组。

array(
1 => array( 
    0 => array( 
        "member_id" => 3,
        "unilevel" => 1 ) )
4 => array( 
    0 => array( 
        "member_id" => 7,
        "unilevel" => 4 ) )
3 => array( 
    0 => array ( 
        "member_id" => 6,
        "unilevel" => 3 ) )
2 => array( 
    0 => array( 
        "member_id" => 4,
        "unilevel" => 2 
    1 => array( 
        "member_id" => 9
        "unilevel" => 2 )))

1 个答案:

答案 0 :(得分:0)

对不起,迟到的回复试试这个

$arr=array("shiva" => array("member_id" => "3","unilevel" => "1","children" => array("0" => array("member_id" => "4","unilevel" => "2","children" => array("0" => array("member_id" => "6", "unilevel" => "3", "children" => array( "0" => array( "member_id" => "7", "unilevel" => "4" ) ) ) ) ), "1" => array( "member_id" => "9", "unilevel" => "2" ))),"1" => array("member_id" => "5","unilevel" => "1","children" => array("0" => array("member_id" => "8","unilevel" => "2", "children" => array( "0" => array( "member_id" => "10", "unilevel" => "3" ) ) ) ) ) );


 function check($arr){

      if(is_array($arr)){

       foreach($arr as $arr1){

         foreach($arr1 as $arr2){

           if(is_array($arr2)){

             return true;               

           }

         }

       }   

     }
     else{

      return false;       

     }

      return false; 

  } 

$i=0;
while(check($arr)){

  foreach($arr as $arr1key=>$arr1val){

    foreach($arr1val as $arr2key=>$arr2val){

         if(is_array($arr2val)){

        $arr[]=$arr[$arr1key][$arr2key];

        unset($arr[$arr1key][$arr2key]);


      }        

   }      


  }  

}






foreach($arr as $arr1key=>$arr1val)
{

  if(count($arr1val)==0){
    unset($arr[$arr1key]);
  }    
}

//print_r($arr);

$result=array();
$values=array();


foreach($arr as $arr1key=>$arr1val)
{

  if(((array_key_exists("unilevel", $arr1val)) || (array_key_exists("member_id", $arr1val)))==true)
  {


      $key=$arr1val['unilevel'];
      $result[0][$key][]=array("unilevel"=>$arr1val["unilevel"],"member_id"=>$arr1val["member_id"]);


  }


}

print_r($result);

结果:

数组([0] =>数组([1] =>数组([0] =>数组([unilevel] => 1 [member_id] => 3)[1] =>数组([unilevel] => 1 [member_id] => 5))[2] =>数组([0] =>数组([unilevel] => 2 [member_id] => 4)[ 1] =>数组([unilevel] => 2 [member_id] => 9)[2] =>数组([unilevel] => 2 [member_id] => 8))[3] = >数组([0] =>数组([unilevel] => 3 [member_id] => 6)[1] =>数组([unilevel] => 3 [member_id] => 10) )[4] =>数组([0] =>数组([unilevel] => 4 [member_id] => 7))))