php递归5,PHP不用递归实现无限分类数据的树形格式化 5行9行代码修改

[1] 语句 $tree[] = &$items[$item['id']]; 这里把不存在的键值、内容加上了,如下例中的键值4,但是无法判断其父类,会将其判断为根id,去掉不要;

[2] 考虑到字段名称问题,使用[1]的参数模式,添加分类id和父类pid设置,同时处理一下取得的数据;

实例如下,从表中取得所有分类数据保存到$rows,已考虑添加顺序和删除记录问题

/*

* php无限分类数据树形格式化

*

* 此方法由 mantye 提供

* http://my.oschina.net/u/223350

* @date 2013-07-22

**/

function genTree($rows, $id='id', $pid='pid') {

$items = array();

foreach ($rows as $row) $items[$row[$id]] = $row;

foreach ($items as $item) $items[$item[$pid]]['son'][$item[$id]] = &$items[$item[$id]];

return isset($items[0]['son']) ? $items[0]['son'] : array();

}

$rows = array(

array('id' => 111, 'pid' => 0, 'name' => '江西省'),

array('id' => 5, 'pid' => 2, 'name' => '鸡西市'),

array('id' => 2, 'pid' => 0, 'name' => '黑龙江省'),

array('id' => 3, 'pid' => 111, 'name' => '南昌市'),

//array('id' => 4, 'pid' => 2, 'name' => '哈尔滨市'),

array('id' => 6, 'pid' => 4, 'name' => '香坊区'),

array('id' => 27, 'pid' => 4, 'name' => '南岗区'),

array('id' => 8, 'pid' => 6, 'name' => '和兴路'),

array('id' => 9, 'pid' => 27, 'name' => '西大直街'),

array('id' => 10, 'pid' => 8, 'name' => '东北林业大学'),

array('id' => 11, 'pid' => 9, 'name' => '哈尔滨工业大学'),

array('id' => 12, 'pid' => 8, 'name' => '哈尔滨师范大学'),

array('id' => 13, 'pid' => 111, 'name' => '赣州市'),

array('id' => 14, 'pid' => 13, 'name' => '赣县'),

array('id' => 15, 'pid' => 13, 'name' => '于都县'),

array('id' => 16, 'pid' => 14, 'name' => '茅店镇'),

array('id' => 17, 'pid' => 14, 'name' => '大田乡'),

array('id' => 18, 'pid' => 16, 'name' => '义源村'),

array('id' => 19, 'pid' => 16, 'name' => '上坝村')

);

echo '

';

$rows = genTree($rows);

print_r($rows);

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值