如何以递归方式获取多维数组中所有父元素的ID?

时间:2014-11-02 21:58:05

标签: php arrays recursion multidimensional-array

假设我有以下PHP多维数组,该数组旨在通过以下方式递归:

$arr = array(
  array(
    'id' => 1,
    'kids' => array(
      array(
        'id' => 11,
        'kids' => array(
          array(
            'id' => 101,
            'kids' => array(),
          ),
        ),
      ), // please note this is a sample
    ),   // it could have any number of levels
  ),
);

如果ID值为101,我能否知道ID 1和11是多维数组中该元素的父元素?

2 个答案:

答案 0 :(得分:2)

我写了一个可能对你有用的功能。

function get_parents($target, $array)
{
    $parents_id = false;
    foreach ($array as $item) {
        if (empty($array)) 
            return;
        if ($item['id'] == $target)
            return array();
        else
            $parents_id = get_parents($target, $item['kids']);
        if (is_array($parents_id))
            array_unshift($parents_id, $item['id']);

    }
    return $parents_id;
}

对于数组中的每个项目,如果它为空,则不返回任何内容。如果它是您要查找的项目,请返回一个空数组,我们将在其中添加父项ID,否则请继续深入查看。此时,如果$ parents_id是一个数组,是因为你找到了你的目标键,所以将父ID输入到数组的开头

像这样调用此函数:get_parents('101', $arr);

在您的示例中,结果将是:

Array
(
    [0] => 1
    [1] => 11
)

如果未找到目标键,则该函数返回false

答案 1 :(得分:0)

这个程序只在第一个数组中工作 而不是这个

$ arr = array(   阵列(     'id'=> 1,//启动root     'parent'=>阵列(       阵列(         'id'=> 2,         'parent'=>阵列(           阵列(             'id'=> 3,             'parent'=> array(array('id'=> 4,'parent'=> array()),array('id'=> 5,'parent'=> array())),           ),

      array(
        'id' => 6,
        'parent' => array(array('id' => 7,'parent' => array()),array('id' => 8,'parent' => array())),
      ),

     ),
  ), 
        array(
    'id' => 9,
    'parent' => array(
      array(
        'id' => 10,
        'parent' => array(array('id' => 11,'parent' => array()),array('id' => 12,'parent' => array())),
      ),

      array(
        'id' => 13,
        'parent' => array(array('id' => 14,'parent' => array()),array('id' => 15,'parent' => array())),
      ),

     ),
  ), 

),  //end root  

),

);