최근 쇼핑몰 프로젝트를 진행하면서 분류 테이블을 정리하기 위해 pid(상위 클래스 ID)를 통해 각 카테고리에 데이터를 꺼내야 했습니다. 2차원 데이터를 트리 형식으로 읽어오기 위해 프로젝트에 다음 방법을 캡슐화했습니다.
<code><span>/** * [treeCats description] *<span> @param</span> [array] $arr [原始未排序的数组] *<span> @param</span> [array] $limit [第一个元素代表开始递归的parent_id,默认为0,第二个元素代表剔除元素及子元素cat_id,如果没有传值,默认为0] *<span> @param</span> integer $level [函数调用的深度] *<span> @return</span> [array] [排好序的数组] */</span><span>public</span><span><span>function</span><span>treeCats</span><span>(<span>$arr</span>,<span>$limit</span>,<span>$level</span>=<span>0</span>)</span>{</span><span>$rec</span> = <span>array</span>(); <span>//先消除cat_id对应的值</span><span>foreach</span> (<span>$arr</span><span>as</span><span>$key</span>=><span>$value</span>){ <span>if</span>(<span>$value</span>[<span>'cat_id'</span>]!=<span>$limit</span>[<span>'cd'</span>]){ <span>$arr_new</span> [<span>$key</span>]=<span>$value</span>; } } <span>//对于新数组进行遍历</span><span>foreach</span> (<span>$arr_new</span><span>as</span><span>$key</span> => <span>$value</span>) { <span>if</span>(<span>$value</span>[<span>'parent_id'</span>]==<span>$limit</span>[<span>"pd"</span>] &&<span>$value</span>[<span>'parent_id'</span>]!=<span>$limit</span>[<span>"cd"</span>]){ <span>$value</span>[<span>'level'</span>]=<span>$level</span>; <span>$rec</span> []= <span>$value</span>; <span>//生成用于下一层循环的数组</span><span>$next_limit</span> = <span>array</span>(<span>"pd"</span>=><span>$value</span>[<span>'cat_id'</span>],<span>"cd"</span>=><span>$limit</span>[<span>"cd"</span>]); <span>$rec</span> = array_merge(<span>$rec</span>,<span>$this</span>->treeCats(<span>$arr</span>,<span>$next_limit</span>,<span>$level</span>+<span>1</span>)); } } <span>return</span><span>$rec</span>; } </code>
여기서 $limit를 설정하는 적용 시나리오는 이 카테고리의 상위 카테고리가 원래 하위 카테고리로 수정되면 브랜치를 잃게 되므로 이때 선택적 카테고리는 Eliminate로 설정해야 합니다. 그 하위 클래스.
위 내용은 내용의 측면을 포함하여 제품의 무제한 카테고리를 반복적으로 읽을 수 있는 PHP의 실제 사용을 소개했습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.