我有多级别类别数组。 如果父母没有孩子,我只想得到孩子的身份证。然后返回该父ID
id parent_id name
1 0 fashion
2 1 women
3 1 men
4 2 jeans
5 2 skirts
6 5 short skirts
7 5 long skirts
8 0 Home & entertainment
我尝试了这个功能。
function buildtree($src_arr, $parent_id = 0, $tree = array()){
foreach($src_arr as $idx => $row){
if($row['parent_id'] == $parent_id){
foreach($row as $k => $v)
$tree[$row['id']][$k] = $v;
unset($src_arr[$idx]);
$tree[$row['id']]['children'] = self::buildtree($src_arr, $row['id']);
}
}
ksort($tree);
return $tree;
}
但它也给了我所有父母的身份。
带有id的期望结果(我输入名称以便于理解)
array(
[0] = men
[1] = jeans
[2] = short skirts
[3] = long skirts
[4] = home & entertainment
)
感谢您的帮助。
答案 0 :(得分:2)
带有where
逻辑的简单not in
子句将帮助您选择孩子,然后选择没有孩子的父母。
select c.id, c.name
from categories c
where c.id not in (select parent_id from categories order by id desc)
其中包含
的结果集+----+----------------------+
| id | name |
+----+----------------------+
| 3 | men |
| 4 | jeans |
| 6 | long skirts |
| 7 | short skirts |
| 8 | home & entertainment |
+----+----------------------+
5 rows in set
答案 1 :(得分:0)
在PHP中完成后,您可以使用此函数,该函数为您提供基于给定parent_id的所有边缘子项的平面数组。如果要检查整个数据库表,则sql-only是更好的选择。
function getchildren($src_arr, $parent_id = 0)
{
$allchildren = array();
foreach($src_arr as $idx => $row){
if($row['parent_id'] == $parent_id){
$children = static::getchildren($src_arr, $row['id']);
if ($children) {
$allchildren = array_merge($allchildren, $children);
} else {
$allchildren[] = $row;
}
}
}
return $allchildren;
}