Flat PHP Array to Hierarchy Tree

后端 未结 3 1469
天涯浪人
天涯浪人 2020-12-03 02:11

I have an array with the following keys

id   
parent_id
name

A sample array:

array(7) {
  [0]=>
  array(3) {
    [\"id\"         


        
3条回答
  •  萌比男神i
    2020-12-03 02:28

    You should use recursion.

    Here an exemple of code:

    $datas = array(
        array('id' => 1, 'parent' => 0, 'name' => 'Page 1'),
        array('id' => 2, 'parent' => 1, 'name' => 'Page 1.1'),
        array('id' => 3, 'parent' => 2, 'name' => 'Page 1.1.1'),
        array('id' => 4, 'parent' => 3, 'name' => 'Page 1.1.1.1'),
        array('id' => 5, 'parent' => 3, 'name' => 'Page 1.1.1.2'),
        array('id' => 6, 'parent' => 1, 'name' => 'Page 1.2'),
        array('id' => 7, 'parent' => 6, 'name' => 'Page 1.2.1'),
        array('id' => 8, 'parent' => 0, 'name' => 'Page 2'),
        array('id' => 9, 'parent' => 0, 'name' => 'Page 3'),
        array('id' => 10, 'parent' => 9, 'name' => 'Page 3.1'),
        array('id' => 11, 'parent' => 9, 'name' => 'Page 3.2'),
        array('id' => 12, 'parent' => 11, 'name' => 'Page 3.2.1'),
        );
    
    function generatePageTree($datas, $parent = 0, $depth=0){
        $ni=count($datas);
        if($ni === 0 || $depth > 1000) return ''; // Make sure not to have an endless recursion
        $tree = '
      '; for($i=0; $i < $ni; $i++){ if($datas[$i]['parent'] == $parent){ $tree .= '
    • '; $tree .= $datas[$i]['name']; $tree .= generatePageTree($datas, $datas[$i]['id'], $depth+1); $tree .= '
    • '; } } $tree .= '
    '; return $tree; } echo(generatePageTree($datas));

    You can test it at: http://phpfiddle.org/main/code/1qy-5fj

    Or if you want the exact format:

    function generatePageTree($datas, $parent = 0, $depth = 0){
        $ni=count($datas);
        if($ni === 0 || $depth > 1000) return ''; // Make sure not to have an endless recursion
        $tree = '';
        for($i=0; $i < $ni; $i++){
            if($datas[$i]['parent'] == $parent){
                $tree .= str_repeat('-', $depth);
                $tree .= $datas[$i]['name'] . '
    '; $tree .= generatePageTree($datas, $datas[$i]['id'], $depth+1); } } return $tree; }

    The test: http://phpfiddle.org/main/code/jw3-s1j

提交回复
热议问题