首頁  >  文章  >  後端開發  >  html - php讀取分類 產生二維陣列 二維陣列值重複

html - php讀取分類 產生二維陣列 二維陣列值重複

WBOY
WBOY原創
2016-09-11 11:34:121052瀏覽

讀取分類目錄產生頂級分類下包含頂級下的其他分類的二維數組
但是下一個頂級分類目錄下的二維數組會包含上一個頂級的值好像是static申明變量的原因但是不知道怎麼改釋放了也一樣下面是截圖求一個原因:
html - php讀取分類 產生二維陣列 二維陣列值重複

圖片描述

html - php讀取分類 產生二維陣列 二維陣列值重複

html - php讀取分類 產生二維陣列 二維陣列值重複

回覆內容:

讀取分類目錄產生頂級分類下包含頂級下的其他分類的二維數組
但是下一個頂級分類目錄下的二維數組會包含上一個頂級的值好像是static申明變量的原因但是不知道怎麼改釋放了也一樣下面是截圖求一個原因:
html - php讀取分類 產生二維陣列 二維陣列值重複

圖片描述

html - php讀取分類 產生二維陣列 二維陣列值重複

html - php讀取分類 產生二維陣列 二維陣列值重複

重新找了下,下面這個應該可以符合要求。

<code><?php


$arr= array(
                '1'=>array('id'=>1, 'pid'=>0,),
                '2'=>array('id'=>2, 'pid'=>0,),
                '3'=>array('id'=>3, 'pid'=>1,),
                '4'=>array('id'=>4, 'pid'=>2,),
                '5'=>array('id'=>5, 'pid'=>4),
                '6'=>array('id'=>6, 'pid'=>5,),
                '7'=>array('id'=>7, 'pid'=>3),
                '8'=>array('id'=>8, 'pid'=>4,),
                '9'=>array('id'=>9, 'pid'=>7),
        );


//以ID为键值格式化
foreach ($arr as $key => $value) {
    $list[$value['id']]=$value;
}

//遍历数组
foreach ($list as $key => $value) {
    if($value['pid']==0){
        $tree[$value['id']]=$value;

    }else{
        //祖先ID
        $ancestor_id='';
        //判断祖先数组里面有没有对应的值,有则取出
        if(!empty($ancestor[$value['pid']])){
            $ancestor_id=$ancestor[$value['pid']];

        }else{
        
            $topid=$value['id'];
            $child=array();
            if(empty($ancestor[$topid])){
                $child[]=$topid;
            }
            //通过循环,一层一层的往上找,找出他们各自的父亲,直到祖宗为止
            while($list[$topid]['pid'] > 0)
            {
                
                    
                    $topid = $list[$topid]['pid'];    

                    if(empty($topid)){
                        $topid='';
                        break;

                    }else{

                        //祖宗数组里面没有,则放入子孙数组
                        if(empty($ancestor[$topid])){
                            $child[]=$topid;
                        }else{
                            //祖先已经存在,就不用循环下去了
                            $topid=$ancestor[$topid];
                            break;

                        }
                        
                    }
            
                    
            }
        
            $ancestor_id= $topid;
            //如果找到祖宗,就将子孙数组对应加入到祖宗数组里面
            if(!empty($ancestor_id)){
                foreach ($child as $k => $v) {
                    $ancestor[$v]=$ancestor_id;
                }
                

            }
            
        }
        if(!empty($ancestor_id)){
            $tree[$ancestor_id]['child'][$value['id']]=$value;

        }


        
    }


    
}
echo '<pre class="brush:php;toolbar:false">';
var_dump($tree);

</code>
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn