讀取分類目錄產生頂級分類下包含頂級下的其他分類的二維數組
但是下一個頂級分類目錄下的二維數組會包含上一個頂級的值好像是static申明變量的原因但是不知道怎麼改釋放了也一樣下面是截圖求一個原因:
圖片描述
讀取分類目錄產生頂級分類下包含頂級下的其他分類的二維數組
但是下一個頂級分類目錄下的二維數組會包含上一個頂級的值好像是static申明變量的原因但是不知道怎麼改釋放了也一樣下面是截圖求一個原因:
圖片描述
重新找了下,下面這個應該可以符合要求。
<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>