代码:
<?php$list = array(array("id"=>1, "pid"=>0, "deep"=>0, "name"=>"test1"),array("id"=>2, "pid"=>1, "deep"=>1, "name"=>"test2"),array("id"=>3, "pid"=>0, "deep"=>0, "name"=>"test3"),array("id"=>4, "pid"=>2, "deep"=>2, "name"=>"test4"),array("id"=>5, "pid"=>2, "deep"=>2, "name"=>"test5"),array("id"=>6, "pid"=>0, "deep"=>0, "name"=>"test6"),array("id"=>7, "pid"=>2, "deep"=>2, "name"=>"test7"),array("id"=>8, "pid"=>5, "deep"=>3, "name"=>"test8"),array("id"=>9, "pid"=>3, "deep"=>2, "name"=>"test9"),);function resolve($list) {$newList = $manages = $deeps = $inDeeps = array();foreach ($list as $row) {$newList[$row["id"]] = $row;}$list = null;foreach ($newList as $row) {if (! isset($manages[$row["pid"]]) || ! isset($manages[$row["pid"]]["children"][$row["id"]])) {if ($row["pid"] > 0 && ! isset($manages[$row["pid"]]["children"])) $manages[$row["pid"]] = $newList[$row["pid"]];$manages[$row["pid"]]["children"][$row["id"]] = $row;}if (! isset($inDeeps[$row["deep"]]) || ! in_array($row["id"], $inDeeps[$row["deep"]])) {$inDeeps[$row["deep"]][] = array($row["pid"], $row["id"]);}}krsort($inDeeps);array_shift($inDeeps);foreach ($inDeeps as $deep => $ids) {foreach ($ids as $m) {// 存在子栏目的进行转移if (isset($manages[$m[1]])) {$manages[$m[0]]["children"][$m[1]] = $manages[$m[1]];$manages[$m[1]] = null;unset($manages[$m[1]]);}}}return $manages[0]["children"];}递归实现
function resolve2(& $list, $pid = 0) {$manages = array();foreach ($list as $row) {if ($row["pid"] == $pid) {$manages[$row["id"]] = $row;$children = resolve2($list, $row["id"]);$children && $manages[$row["id"]]["children"] = $children;}}return $manages;}以上这篇PHP不使用递归的无限级分类简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。