这里有新鲜出炉的PHP面向对象编程,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于web开发领域。PHP的文件后缀名为php。
下面小编就为大家带来一篇PHP不使用递归的无限级分类简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
不用递归实现无限级分类,简单测试了下性能比递归稍好一点点点,但写得太复杂了,还是递归简单方便点
代码:
- <?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不使用递归的无限级分类简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持PHPERZ。
来源: http://www.phperz.com/article/17/0831/341469.html