Heim  >  Artikel  >  Backend-Entwicklung  >  关于php评论回复无限极嵌套如何实现?已写基本代码,期待高手解惑

关于php评论回复无限极嵌套如何实现?已写基本代码,期待高手解惑

PHP中文网
PHP中文网Original
2017-03-27 16:18:101768Durchsuche

问题:

下面是有3层嵌套的评论,parent=0表示一级评论,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空间评论回复特效

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:数据库服务Nächster Artikel:[整理]PHP/HTML混写的四种方式