面试很容易碰到无限分类题,这里分享一个简单的无限分类,比较容易上手。
<?php
$arr = array(
array('id'=>1, 'title'=>'湖南', 'pid'=>0),
array('id'=>2, 'title'=>'湖北', 'pid'=>0),
array('id'=>3, 'title'=>'广东', 'pid'=>0),
array('id'=>4, 'title'=>'广西', 'pid'=>0),
array('id'=>5, 'title'=>'新疆', 'pid'=>0),
array('id'=>6, 'title'=>'西藏', 'pid'=>0),
array('id'=>7, 'title'=>'长沙', 'pid'=>1),
array('id'=>8, 'title'=>'株洲', 'pid'=>1),
array('id'=>9, 'title'=>'湘潭', 'pid'=>1),
array('id'=>10, 'title'=>'长沙县', 'pid'=>7),
array('id'=>11, 'title'=>'望城县', 'pid'=>7),
array('id'=>12, 'title'=>'宁乡县', 'pid'=>7),
array('id'=>13, 'title'=>'深圳', 'pid'=>3),
array('id'=>14, 'title'=>'广州', 'pid'=>3),
array('id'=>15, 'title'=>'龙华新区', 'pid'=>13),
);
function dsort($arr, $pid=0, $level=0){
foreach($arr as $a){
$tag = str_repeat('--', $level);
if($a['pid'] == $pid){
echo $tag.$a['title'].'<br>';
dsort($arr, $a['id'], $level+1);
}
}
}
$r = dsort($arr);
输出结果:
湖南
--长沙
----长沙县
----望城县
----宁乡县
--株洲
--湘潭
湖北
广东
--深圳
----龙华新区
--广州
广西
新疆
西藏
这里有个小示例理解下递归的用法:
function sum($n){
$a = 0;
if($n>1){
$a = sum($n-1)+$n;
} else {
$a = 1;
}
return $a;
}
echo sum(10);
以上是迭代版本,这里来一个非迭代版本:
此版本为了简约计算,加了索引,大家可以试下不加数据组引的情况。
<?php
$arr = array(
1=>array('id'=>1, 'title'=>'湖南', 'pid'=>0),
2=>array('id'=>2, 'title'=>'湖北', 'pid'=>0),
3=>array('id'=>3, 'title'=>'广东', 'pid'=>0),
4=>array('id'=>4, 'title'=>'广西', 'pid'=>0),
5=>array('id'=>5, 'title'=>'新疆', 'pid'=>0),
6=>array('id'=>6, 'title'=>'西藏', 'pid'=>0),
7=>array('id'=>7, 'title'=>'长沙', 'pid'=>1),
8=>array('id'=>8, 'title'=>'株洲', 'pid'=>1),
9=>array('id'=>9, 'title'=>'湘潭', 'pid'=>1),
10=>array('id'=>10, 'title'=>'长沙县', 'pid'=>7),
11=>array('id'=>11, 'title'=>'望城县', 'pid'=>7),
12=>array('id'=>12, 'title'=>'宁乡县', 'pid'=>7),
13=>array('id'=>13, 'title'=>'深圳', 'pid'=>3),
14=>array('id'=>14, 'title'=>'广州', 'pid'=>3),
15=>array('id'=>15, 'title'=>'龙华新区', 'pid'=>13),
);
function tree($arr){
$t = array();
foreach($arr as $a){
if(isset($arr[$a['pid']])){
$arr[$a['pid']]['son'][] = &$arr[$a['id']];
} else {
$t[] = &$arr[$a['id']];
}
}
return $t;
}
运行结果:
Array ( [0] => Array ( [id] => 1 [title] => 湖南 [pid] => 0 [son] => Array ( [0] => Array ( [id] => 7 [title] => 长沙 [pid] => 1 [son] => Array ( [0] => Array ( [id] => 10 [title] => 长沙县 [pid] => 7 ) [1] => Array ( [id] => 11 [title] => 望城县 [pid] => 7 ) [2] => Array ( [id] => 12 [title] => 宁乡县 [pid] => 7 ) ) ) [1] => Array ( [id] => 8 [title] => 株洲 [pid] => 1 ) [2] => Array ( [id] => 9 [title] => 湘潭 [pid] => 1 ) ) ) [1] => Array ( [id] => 2 [title] => 湖北 [pid] => 0 ) [2] => Array ( [id] => 3 [title] => 广东 [pid] => 0 [son] => Array ( [0] => Array ( [id] => 13 [title] => 深圳 [pid] => 3 [son] => Array ( [0] => Array ( [id] => 15 [title] => 龙华新区 [pid] => 13 ) ) ) [1] => Array ( [id] => 14 [title] => 广州 [pid] => 3 ) ) ) [3] => Array ( [id] => 4 [title] => 广西 [pid] => 0 ) [4] => Array ( [id] => 5 [title] => 新疆 [pid] => 0 ) [5] => Array ( [id] => 6 [title] => 西藏 [pid] => 0 ) )
转载请注明:朋克网 » 基础面试题–树形无限分类php实现(基础版)