cari

Rumah  >  Soal Jawab  >  teks badan

php - Bagaimana untuk mendapatkan semua ulasan artikel secara rekursif? ? ?

Struktur jadual:
comment_id comment ID
arc_id article ID
kandungan kandungan
parent_id comment parent nod

Saya ingin mendapatkan struktur data sedemikian secara rekursif:

$arr=array(

[0]=>array(
    comment_id=>1
    parent_id =>0
    ['child']=>array(
       [0]=>array(
            comment_id=>2
            parent_id =>1
         ) 
          
       [1]=>array(
            comment_id=>3
            parent_id =>2
         ) 
       [2]=>array(
            comment_id=>4
            parent_id =>1
         )   
        ........
    )
    
)

[1]=>array(
     comment_id=>5
     parent_id =>0
    ['child']=>array(
       [0]=>array(
            comment_id=>6
            parent_id =>5
         ) 
          
       [1]=>array(
            comment_id=>7
            parent_id =>5
         ) 
       [2]=>array(
            comment_id=>8
            parent_id =>7
         )   
        ........
    )
)

)

phpcn_u1582phpcn_u15822745 hari yang lalu988

membalas semua(1)saya akan balas

  • 欧阳克

    欧阳克2017-06-30 09:55:28

    1. Mula-mula keluarkan tatasusunan dua dimensi, setiap item mempunyai medan comment_idparent_id

    2. Kemudian gunakan fungsi berikut untuk menukar tatasusunan dua dimensi di atas kepada struktur pokok:

    <?php
    $arr = [
        ['comment_id' => 1, 'parent_id' => 0],
        ['comment_id' => 2, 'parent_id' => 0],
        ['comment_id' => 3, 'parent_id' => 2],
        ['comment_id' => 4, 'parent_id' => 1],
        ['comment_id' => 5, 'parent_id' => 4],
        ['comment_id' => 6, 'parent_id' => 4],
    ];
    
    function getTree($arr = []) {
        $a = array_column($a, NULL, 'comment_id');
        $tree = [];
    
        foreach($a as $i => &$v) {
            if(isset($items[$item['parent_id']])){
                $items[$item['parent_id']]['children'][] = &$items[$item['comment_id']];
            } else {
                $tree[] = &$items[$item['id']];
            }
        }
    
        return $tree;
    }

    balas
    0
  • Batalbalas