Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中从多级数组中获取唯一的子id_Php_Recursion - Fatal编程技术网

在PHP中从多级数组中获取唯一的子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。然后也返回父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 
)
感谢您的帮助。

带有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…没有线索,啊哈!我会更正我的答案,使它不那么复杂。谢谢