MYSQL父子相同表; PHP将父母中的孩子视为多维数组

Bri*_*ham 0 php mysql arrays mysqli multidimensional-array

MYSQL返回一个数组,如下所示.我正在使用column:'id_parent'来自我引用表来创建层次结构.因此,'id'为2的条目可以是'id_parent'为2的任何条目的父级,依此类推.

Array 
  (

    [1] => Array
        (
            [id] => 2
            [name] => About
            [id_parent] => NULL
        )

    [2] => Array
        (
            [id] => 4
            [name] => About Child
            [id_parent] => 2
        )

    [3] => Array
        (
            [id] => 5
            [name] => About Child's Child
            [id_parent] => 4
        )
  )
Run Code Online (Sandbox Code Playgroud)

如何将子项嵌套到父数组中的数组中

Array
  (

    [1] => Array
        (
            [id] => 2
            [name] => About
            [id_parent] => 
            [children] => Array
                      (
                          [id] => 4
                          [name] => About Child
                          [id_parent] => 2
                          [children] => Array
                                    (
                                        [id] => 5
                                        [name] => About Child's Child
                                        [id_parent] => 4
                                    )
                      )
        )
  )
Run Code Online (Sandbox Code Playgroud)

Wri*_*ken 12

引用,具有顺序无关紧要的优点(子节点可以在其父节点之前):

 $tree = array('NULL' => array('children' => array()));
 foreach($array as $item){
    if(isset($tree[$item['id']])){
       $tree[$item['id']] = array_merge($tree[$item['id']],$item);
    } else {
       $tree[$item['id']] = $item;
    }

    $parentid = is_null($item['id_parent']) ? 'NULL' : $item['id_parent'];
    if(!isset($tree[$parentid])) $tree[$parentid] = array('children' => array());
    //this & is where the magic happens: any alteration to $tree[$item['id']
    //  will reflect in the item $tree[$parentid]['children'] as they are the same
    //  variable. For instance, adding a child to $tree[$item['id']]['children]
    //  will be seen in 
    //  $tree[$parentid]['children'][<whatever index $item['id'] has>]['children]
    $tree[$parentid]['children'][] = &$tree[$item['id']];
 }
 $result = $tree['NULL']['children'];
 //always unset references
 unset($tree);
Run Code Online (Sandbox Code Playgroud)