首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP数组获取父元素和子元素

PHP数组获取父元素和子元素
EN

Stack Overflow用户
提问于 2018-07-21 23:07:59
回答 2查看 1K关注 0票数 1

你好,我有一个来自数据集的数组:

示例:

代码语言:javascript
复制
array (
  1 => 
  array (
    'id' => '1',
    'name' => ' Category',
    'id_parent' => '0',
    'ativo' => '1',
  ),
  2 => 
  array (
    'id' => '2',
    'name' => ' Slippers',
    'id_parent' => '0',
    'ativo' => '1',
  ),
  3 => 
  array (
    'id' => '3',
    'name' => ' TShirts',
    'id_parent' => '0',
    'ativo' => '1',
  ),
  4 => 
  array (
    'id' => '4',
    'name' => ' BlousesSweatshirt',
    'id_parent' => '0',
    'ativo' => '1',
  ),
  5 => 
  array (
    'id' => '5',
    'name' => ' Cap',
    'id_parent' => '0',
    'ativo' => '1',
  ),
  6 => 
  array (
    'id' => '6',
    'name' => ' Stickers',
    'id_parent' => '0',
    'ativo' => '1',
  ),
  7 => 
  array (
    'id' => '7',
    'name' => ' ScreensandFrames',
    'id_parent' => '0',
    'ativo' => '1',
  ),
  8 => 
  array (
    'id' => '8',
    'name' => ' Models',
    'id_parent' => '0',
    'ativo' => '1',
  ),
  9 => 
  array (
    'id' => '9',
    'name' => ' Notebook',
    'id_parent' => '6',
    'ativo' => '1',
  ),
  10 => 
  array (
    'id' => '10',
    'name' => ' Door',
    'id_parent' => '0',
    'ativo' => '1',
  ),
  11 => 
  array (
    'id' => '11',
    'name' => ' Door',
    'id_parent' => '6',
    'ativo' => '1',
  ),
  12 => 
  array (
    'id' => '12',
    'name' => ' Kangaroo',
    'id_parent' => '4',
    'ativo' => '1',
  ),
  13 => 
  array (
    'id' => '13',
    'name' => ' KangarooRaglan',
    'id_parent' => '4',
    'ativo' => '1',
  ),
  14 => 
  array (
    'id' => '14',
    'name' => ' RoundCollar',
    'id_parent' => '4',
    'ativo' => '1',
  ),
  15 => 
  array (
    'id' => '15',
    'name' => ' Trucker',
    'id_parent' => '5',
    'ativo' => '1',
  ),
  16 => 
  array (
    'id' => '16',
    'name' => ' Basic',
    'id_parent' => '3',
    'ativo' => '1',
  ),
  17 => 
  array (
    'id' => '17',
    'name' => ' Longline',
    'id_parent' => '3',
    'ativo' => '1',
  ),
  18 => 
  array (
    'id' => '18',
    'name' => ' Raglan',
    'id_parent' => '3',
    'ativo' => '1',
  ),
  19 => 
  array (
    'id' => '19',
    'name' => ' Raglan3/4',
    'id_parent' => '3',
    'ativo' => '1',
  ),
  20 => 
  array (
    'id' => '20',
    'name' => ' Regatta',
    'id_parent' => '3',
    'ativo' => '1',
  ),
  21 => 
  array (
    'id' => '21',
    'name' => ' Slide',
    'id_parent' => '2',
    'ativo' => '1',
  ),
  22 => 
  array (
    'id' => '22',
    'name' => ' Stickers',
    'id_parent' => '8',
    'ativo' => '1',
  ),
  23 => 
  array (
    'id' => '23',
    'name' => ' Notebook',
    'id_parent' => '22',
    'ativo' => '1',
  ),
  24 => 
  array (
    'id' => '24',
    'name' => ' T-shirt',
    'id_parent' => '8',
    'ativo' => '1',
  ),
  25 => 
  array (
    'id' => '25',
    'name' => ' Basic',
    'id_parent' => '24',
    'ativo' => '1',
  ),
  26 => 
  array (
    'id' => '26',
    'name' => ' Slippers',
    'id_parent' => '8',
    'ativo' => '1',
  ),
  27 => 
  array (
    'id' => '27',
    'name' => ' Slide',
    'id_parent' => '26',
    'ativo' => '1',
  ),
  28 => 
  array (
    'id' => '28',
    'name' => ' 1Screen',
    'id_parent' => '7',
    'ativo' => '1',
  ),
  29 => 
  array (
    'id' => '29',
    'name' => ' Set3Screens',
    'id_parent' => '7',
    'ativo' => '1',
  ),
  30 => 
  array (
    'id' => '30',
    'name' => ' Set5Screens',
    'id_parent' => '7',
    'ativo' => '1',
  ),
  31 => 
  array (
    'id' => '31',
    'name' => ' BlousesSweatshirt',
    'id_parent' => '8',
    'ativo' => '1',
  ),
  32 => 
  array (
    'id' => '32',
    'name' => ' Cap',
    'id_parent' => '8',
    'ativo' => '1',
  ),
  33 => 
  array (
    'id' => '33',
    'name' => ' ScreensandFrames',
    'id_parent' => '8',
    'ativo' => '1',
  ),
)

而这个数组我们有父亲和孩子,

示例:

-EX:1模特是:贴纸,T恤,拖鞋之父

Notebook贴纸之父:-EX:2

我需要的是一个函数来递归地获取Model和所有的孩子(直到结束):

我已经完成了一个从Notebook中获取递归父亲的函数,例如:

这里:

代码语言:javascript
复制
function returnParent($id, $haystack, $arr = null){

    $needle = $haystack[$id];

    $arr[] = $needle;

        if($needle['id_parent']){
            return returnParent($needle['id_parent'], $haystack, $arr);
        }else{
            return $arr;
        }
}

其中$id = 23$haystack是完整的数据集。

结果:

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [id] => 23
            [name] => Notebook
            [id_parent] => 22
        )

    [1] => Array
        (
            [id] => 22
            [name] => Stickers
            [id_parent] => 8
        )

    [2] => Array
        (
            [id] => 8
            [name] => models
            [id_parent] => 0
        )

)

返回子代的函数结果需要和returnParent相同,查找到的值需要作为key 0在数组中;

完整数据集在此处:https://pastebin.com/jgTM7aLA

让我的功能变得更好的建议非常好用:)

编辑

预期输出:

代码语言:javascript
复制
  0 => 
  array (
    'id' => '8',
    'name' => ' Models',
    'id_parent' => '0',
    'ativo' => '1',
  ),

  1 => 
  array (
    'id' => '6',
    'name' => ' Stickers',
    'id_parent' => '0',
    'ativo' => '1',
  ),

  2 => 
  array (
    'id' => '9',
    'name' => ' Notebook',
    'id_parent' => '6',
    'ativo' => '1',
  ),

  3 => 
  array (
    'id' => '24',
    'name' => ' T-shirt',
    'id_parent' => '8',
    'ativo' => '1',
  ),

  4 => 
  array (
    'id' => '25',
    'name' => ' Basic',
    'id_parent' => '24',
    'ativo' => '1',
  )... and ..etc

类似这样,键0必须是搜索值,其他值不需要是树顺序,任何顺序都可以,只要获取所有值即可。

换句话说:

获取一个数组节点,显示他和所有子代和孙代。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51457315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档