我有一个包含两列id
和parent_id
的表
|-id-|-parent_id-|
| 1 | 0 |
| 2 | 1 |
| 3 | 16 |
| 4 | 19 |
| 5 | 19 |
| 6 | 2 |
| 7 | 2 |
| 8 | 6 |
| 9 | 19 |
| 10 | 4 |
| 11 | 4 |
| 12 | 2 |
| 13 | 19 |
| 14 | 13 |
| 15 | 2 |
| 16 | 19 |
| 17 | 13 |
| 18 | 19 |
| 19 | 1 |
|-id-|-parent_id-|
我试着让所有的孩子
所以我做了一个函数getRecursiveChildren()
来检查每个id
,如果这个id
有孩子,我就把他们推到一个数组中,但由于某种原因,这不起作用!
下面是我代码:
<?php
$passed_parent_id=1;
$q = mysqli_query($link, "SELECT * FROM `_del_test` WHERE `isActive` = '1' AND `parent_id` = '$passed_parent_id'");
if($q&&mysqli_num_rows($q)>0)
{
# get all kids
while($qr=mysqli_fetch_assoc($q))
{
$sys_id = $qr['sys_id'];
$parent_id = $qr['parent_id'];
getRecursiveChildren($sys_id,$parent_id);
}
}
function getRecursiveChildren($id, $items): array
{
$kids = [];
foreach ($items as $key => $item) {
if ($item['parent_id'] === $id) {
$kids[] = $key;
if ($id !== $key) {
array_push($kids, ...getRecursiveChildren($key, $items));
}
}
}
return $kids;
}
?>
你能帮帮我吗?!我的脑子卡住了,我再也不能思考了谢谢
2条答案
按热度按时间nmpmafwu1#
您可以使用
array_filter
提取具有特定父项的所有项。然后你再次循环这些提取的项,递归地做同样的事情。请注意,这个函数不仅返回子ID,它还返回[child,parent]元组-这是它工作所必需的。但是如果需要的话,可以使用
array_column
只提取子ID。测试结果:
vh0rcniy2#
这将按照 item > child > child > item> item > item > child > item 的顺序创建一个数组:
从内到外:
array_filter
删除“parent_id”不匹配的项。array_map
从一个项目中获取'id'部分,并通过递归调用 extractChildren 来获取项目的子项。array_merge
与spread运算符一起使用,结果将被删除。输出量: