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