카테고리 디렉토리를 읽어 최상위 카테고리 아래에 다른 카테고리를 포함하는 2차원 배열을 생성합니다.
그러나 다음 최상위 카테고리 디렉토리 아래의 2차원 배열에는 이전 카테고리의 값이 포함됩니다. 최상위 디렉토리입니다. 변수를 정적 선언하는 이유인 것 같습니다. 하지만 릴리스를 변경하는 방법을 모르고 이유를 묻는 스크린샷은 다음과 같습니다.
이미지 설명
카테고리 디렉토리를 읽어 최상위 카테고리 아래에 다른 카테고리를 포함하는 2차원 배열을 생성합니다.
그러나 다음 최상위 카테고리 디렉토리 아래의 2차원 배열에는 이전 카테고리의 값이 포함됩니다. 최상위 디렉토리입니다. 변수를 정적 선언하는 이유인 것 같습니다. 하지만 릴리스를 변경하는 방법을 모르겠는데 이유를 묻는 스크린샷은 다음과 같습니다.
이미지 설명
다시 검색해 보면 다음 요건을 충족해야 합니다.
<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>