PHPコメント返信でInfinitusネストを実装するにはどうすればよいですか?基本的なコードは書かれています。専門家が私の質問に答えてくれるのを楽しみにしています。

PHP中文网
リリース: 2023-02-28 16:08:02
オリジナル
1720 人が閲覧しました

質問:

以下は 3 レベルのネストを持つコメントです。Parent=0 は第 1 レベルのコメントを意味し、parent=3 は親コメントの ID が 3 であることを意味します

$comments = array (
    array (
        'id' => '3',
        'parent' => '0'
    ),
    array (
        'id' => '9',
        'parent' => '0'
    ),
    array (
        'id' => '1',
        'parent' => '3'
    ),
    array (
        'id' => '2',
        'parent' => '3'
    ),
    array (
        'id' => '5',
        'parent' => '1'
    )
    ,
    array (
        'id' => '7',
        'parent' => '1'
    )
);
ログイン後にコピー

私が望む効果を達成するための最も愚かな方法

$sub = array ();
foreach ($comments as $a) {
    if ($a['parent'] == 0) {
        foreach ($comments as $b) {
            if ($b['parent'] == $a['id']) {
                foreach ($comments as $c) {
                    if ($c['parent'] == $b['id']) {
                        $b['children'][] = $c;
                    }
                }
                $a['children'][] = $b;
            }
        }
        $sub[] = $a;
    }
}
echo &#39;<pre class="brush:php;toolbar:false">&#39;;
print_r($sub);
ログイン後にコピー

印刷 出てくるのは私が望む効果です。子コメントは親コメントの子配列として使用されますが、このように複数のコメント層をネストすることはできません。
助けてください、ありがとう!

解決策:

は無限レベルの分類問題として理解できますか?

// 无限级分类
    $list = array(
        array(&#39;id&#39;=>1, &#39;fid&#39;=>0, &#39;title&#39; => &#39;中国&#39;), 
        array(&#39;id&#39;=>2, &#39;fid&#39;=>1, &#39;title&#39; => &#39;江苏&#39;),
        array(&#39;id&#39;=>3, &#39;fid&#39;=>1, &#39;title&#39; => &#39;安徽&#39;),
        array(&#39;id&#39;=>4, &#39;fid&#39;=>8, &#39;title&#39; => &#39;江阴&#39;),
        array(&#39;id&#39;=>5, &#39;fid&#39;=>3, &#39;title&#39; => &#39;芜湖&#39;),
        array(&#39;id&#39;=>6, &#39;fid&#39;=>3, &#39;title&#39; => &#39;合肥&#39;),
        array(&#39;id&#39;=>7, &#39;fid&#39;=>3, &#39;title&#39; => &#39;蚌埠&#39;),
    );
 
    $new = array();
    foreach($list as $v){
        $new[$v[&#39;fid&#39;]][] = $v;
    }
 
    $i = 0;
    $j = 0;
    $a = true;
    $p[$i] = 0;
    $q[$j] = $i;
    while($a){
        $next = false;
        $i = $q[$j];
        $var = $new[$i];
        if(!isset($p[$i])){
            $p[$i] = 0;
        }
        if($p[$i] == count($var)){
            echo &#39;</ul>&#39;;
        }else{
            for($k=$p[$i]; $k<count($var);$k++){
                if($k == 0)
                    echo &#39;<ul>&#39;;
                echo &#39;<li>&#39;.$var[$k][&#39;title&#39;];
                $p[$i]++;
                if(isset($new[$var[$k][&#39;id&#39;]])){
                    $i = $var[$k][&#39;id&#39;];
                    $j++;
                    $q[$j] = $i;
                    $next = true;
                    break;
                }
                echo &#39;</li>&#39;;
                if($k == count($var)-1){
                    echo &#39;</ul>&#39;;
                }
            }
        }
        if($next){
            continue;
        }
        $j--;
        if($j < 0){
            break;
        }
    }
     
    exit;
ログイン後にコピー

関連記事:

PHPコメント返信ソリューション

PHPワイヤレスレベル分類を使用してコメント返信機能を実装

JSを使用してQQスペースコメント返信エフェクトを完璧に実装

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!