基础面试题–树形无限分类php实现(基础版)

PHP admin 231℃ 0评论

面试很容易碰到无限分类题,这里分享一个简单的无限分类,比较容易上手。

<?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实现(基础版)

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址