PHP递归数组


PHP Recursion Array

PHP -需要使这个数组(id与子数组)

下面的数据库屏幕截图

Array
(
 [0] => Array
    (
        [id] => 1
        [children] => Array
            (
                [0] => Array
                    (
                        [id] => 2
                        [children] => Array
                            (
                                [0] => Array
                                    (
                                        [id] => 3
                                    )
                                [1] => Array
                                    (
                                        [id] => 4
                                    )
                            )
                    )
                [1] => Array
                    (
                        [id] => 5
                    )
            )
       )
  )

我正在使用这个函数,但卡在第一个子

$data = BookCategory::all();
$arr  = [];
$i    = 0;
foreach ($data as $row) {
    if ($row->parent == 0) {
       $arr[$i] = ['id' => $row->id . '-' . $row->title];
       $this->_rec1($row->id, $arr, $i);
       $i++;
    }
 }

public function _rec1($id, &$arr, &$i)
{
    $getData = BookCategory::where('parent', '=', $id)->get();
    if (count($getData) > 0) {
        foreach ($getData as $row) {
            $arr[$i]['children'][] = ['id' => $row->id . '-' . $row->title];
            $this->_rec1($row->id, $arr, $i);
        }
    }
}

代码输出为.................................................................................

Array
(
[0] => Array
(
    [id] => 1-My books2
)
[1] => Array
    (
        [id] => 2-new book
        [children] => Array
            (
                [0] => Array
                    (
                        [id] => 3-my new more book
                    )
                [1] => Array
                    (
                        [id] => 4-new moew
                    )
                [2] => Array
                    (
                        [id] => 5-new moew2
                    )
                [3] => Array
                    (
                        [id] => 6-my new more book2
                    )
            )
    )
[2] => Array
    (
        [id] => 9-25
    )
[3] => Array
    (
        [id] => 10-28
    )
[4] => Array
    (
        [id] => 11-59
    )
)

Thanks in Advance

如果您想要一个像第一个代码片段那样的数组,您应该尝试这样做:

$data = BookCategory::all();
$arr  = [];
foreach ($data as $row) {
    if ($row->parent == 0) {
        $arr[] = ['id' => $row->id, 'children' => []];
        $this->_rec1($row->id, $arr[count($arr])-1]);
    }
}
public function _rec1($id, &$arr)
{
    $getData = BookCategory::where('parent', '=', $id)->get();
    if (count($getData) > 0) {
        foreach ($getData as $row) {
            $arr[] = ['id' => $row->id, 'children' => []];
            $this->_rec1($row->id, $arr[count($arr])-1]['children']);
        }
    }
}