2015-06-25 159 views
0

我有一个数组(数据来自邻接表),它看起来像:获取路径列

$data = Array 
(
    [0] => Array 
     (
      [id] => 1 
      [name] => Anniversary 
      [parent] => 0 
     ) 

    [1] => Array 
     (
      [id] => 12 
      [name] => New arrives 
      [parent] => 1 
     ) 

    [2] => Array 
     (
      [id] => 13 
      [name] => Discount 
      [parent] => 12 
     ) 

    [3] => Array 
     (
      [id] => 6 
      [name] => Birthday 
      [parent] => 0 
     ) 
) 

我有通过ID返回路径数组的函数:

function categoryRecursion($element, $input) { 

     $return = array_filter($input, function($v) use ($element) { return $v->id == $element; }); 
     $last = end($return); 
     $str[] = $last; 
     if($last->parent !=0) { 
      $str[] = categoryRecursion($last->parent, $input); 
     } 
     return array_reverse($str); //implode('->',array_reverse($str)); 
} 

当我使用它:

print(categoryRecursion('13',$data)); 

我得到这样的输出:

Array 
(
    [0] => Array 
     (
      [0] => Array 
       (
        [0] => stdClass Object 
         (
          [id] => 1 
          [name] => Anniversary 
          [parent] => 0 
         ) 

       ) 

      [1] => stdClass Object 
       (
        [id] => 12 
        [name] => New arrives 
        [parent] => 1 
       ) 

     ) 

    [1] => stdClass Object 
     (
      [id] => 13 
      [name] => Discount 
      [parent] => 12 
     ) 

) 

但是我正在寻找的方式来获得输出:

Array 
    (
     [0] => stdClass Object 
      (
       [id] => 1 
       [name] => Anniversary 
       [parent] => 0 
      ) 
     ) 

     [1] => stdClass Object 
      (
       [id] => 12 
       [name] => New arrives 
       [parent] => 1 
      ) 

     ) 

     [2] => stdClass Object 
      (
       [id] => 13 
       [name] => Discount 
       [parent] => 12 
      ) 

    ) 

如何解决我的功能?

回答

0

我不明白你的数组成为对象的地方。如果使用阵列,代码可以是

function categoryRecursion($element, $input) { 

     $return = array_filter($input, function($v) use ($element) { return $v['id'] == $element; }); 
     $last = end($return); 
     $str[] = $last; 
     if($last['parent'] !=0) { 
      $str = array_merge(categoryRecursion($last['parent'], $input), $str); 
     } 
     return $str; 
}