在PHP中从多级数组中获取唯一的子id
我有多级分类数组。 如果父母没有孩子,我只想得到孩子的ID。然后也返回父id在PHP中从多级数组中获取唯一的子id,php,recursion,Php,Recursion,我有多级分类数组。 如果父母没有孩子,我只想得到孩子的ID。然后也返回父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
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
)
感谢您的帮助。带有not in逻辑的简单where子句将帮助您选择孩子,然后选择没有孩子的家长
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
在PHP中完成后,您可以使用此函数,它将根据给定的父项id为您提供一个包含所有边缘子项的平面数组。如果您希望检查整个数据库表,则最好选择sql
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;
}
请将数组写为数组。还有一点,你为什么标记mysql?你们是从表中得到这个数组的吗?这有关系吗?你们理解这个问题吗?当然,若你们从表中选择它,可以用query来做。现在还不清楚,至少对我来说是这样。是否要检查任何记录是否有子项,然后选择它?期望的输出表明,如果任何id作为父id存在,那么get。为什么这么复杂?这给出了期望的结果:从类别c中选择c.id,c.name,其中c.id不在按id描述的类别顺序中选择父\u id…没有线索,啊哈!我会更正我的答案,使它不那么复杂。谢谢