无限极分类如何获取每一极的后代数量,包括儿子和孙子

例如:
`$items = array(

0 => array('id' => 0, 'pid' => -1, 'name' => '中国'),
1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),
2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),
3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),
4 => array('id' => 4, 'pid' => 3, 'name' => '长丰县'),
5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市'),

);`

我想得到

`$items = array(

0 => array('id' => 0, 'pid' => -1, 'name' => '中国', 'num' => '后代数量'),
1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省', 'num' => '后代数量'),
2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省', 'num' => '后代数量'),
3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市', 'num' => '后代数量'),
4 => array('id' => 4, 'pid' => 3, 'name' => '长丰县', 'num' => '后代数量'),
5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市', 'num' => '后代数量'),

);`

如果是生成树之后的,只要有后代数量也行,谢谢各位大神了

阅读 2.8k
3 个回答

不会 PHP,尽量写的像 PHP:

1、对原始数据按照 pid 做一个分类,得到一个 pid => items 的对象: pidItems,可以用数组的 reduce 方法,PHP 应该也有的,代码:

var $pidItems = array_reduce($items, function ($res, $item) {
    $res[$item['pid']] = $res[$item['pid']] || array();
    array_push($res[$item['pid']], $item);
    return $res;
}, array());

2、遍历原始数据,执行 $item['num'] = $pidItems[$item['pid']].count;

我一般不用PHP实现全部。为什么呢?因为遇到部分情境下会出现内存溢出。我通常是把原始数组中的无限上级或无限下级找出来,然后把数据交给前端。前端只需在使用节点的时候拿一下children中的值就可以一行代码获取元素的个数了。如果用PHP,还需要再循环一遍数组。

你可以参考这篇文章:https://www.zkii.net/tech/php...

如果你确实想用PHP获取后代数量,就再循环一遍找到无限下级ID后的数组。然后sizeof()一下就行了。不过还是建议前端来弄。

这种 用递归函数呀, 很简单

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题