【问题标题】:How can I recursively get the IDs of all the parent elements in a multidimensional array?如何递归获取多维数组中所有父元素的 ID?
【发布时间】:2014-12-29 13:25:56
【问题描述】:

假设我有以下 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 是多维数组中该元素的父元素?

【问题讨论】:

  • 任何树搜索算法都应该工作。对于 PHP 实现,例如 stoimen.com/blog/2012/09/17/…
  • 每@M.Page 评论。这里有一些关于这个想法的阅读。 en.wikipedia.org/wiki/Tree_traversal 例如,您可以使用您要查找的 ID 的基本情况进行深度优先搜索。然后,您可以在返回时传递父 ID 的备份。
  • 我还建议对您的数组设置进行更改:将键设置为 id 值,然后将它们用于横向。让我看看我是否可以让快速示例工作。

标签: php arrays recursion multidimensional-array


【解决方案1】:

这个程序只在第一个数组深处工作 并且不能这样做

$arr = 数组( 大批( 'id' => 1, //开始根 '父' => 数组( 大批( 'id' => 2, '父' => 数组( 大批( 'id' => 3, '父' => 数组(数组('id' => 4,'父' => 数组()),数组('id' => 5,'父' => 数组())), ),

      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  

),

);

【讨论】:

    【解决方案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是一个数组,那是因为你已经找到了你的目标key,所以在你的数组开头加上parents ids

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

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

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

    如果没有找到目标键,函数返回false

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-10
      • 2022-06-14
      • 2016-05-09
      • 2018-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-12
      相关资源
      最近更新 更多