【问题标题】:Use array to select array keys recursively使用数组递归选择数组键
【发布时间】:2014-12-21 19:45:43
【问题描述】:

我在试图正确解释这一点时遇到了一些麻烦,所以请多多包涵……

我需要能够根据给定的数组递归地选择键。我可以通过一个相当简单的foreach 语句来做到这一点(如下所示)。但是,我更喜欢尽可能通过 PHP 的内置函数来做事。

$selectors = array('plants', 'fruits', 'apple');
$list = array(
    'plants' => array(
        'fruits' => array(
            'apple' => 'sweet',
            'orange' => 'sweet',
            'pear' => 'tart'
        )
    )
);

$select = $list;
foreach ($selectors as $selector) {
    if (isset($select[$selector])) {
        $select = $select[$selector];
    } else {
        exit("Error: '$selector' not found");
    }
}

echo $select;

See this code in action

我的问题: 是否有 PHP 函数可以递归地选择数组键?如果没有,有没有比上面的例子更好的方法?

【问题讨论】:

  • The top commentarray_search()手册中有递归函数示例
  • @scrowler 如果我没看错的话,这个函数似乎在搜索数组值,而我需要一些东西来选择已知的键。
  • 嘿@NickJ,很公平 - StackOverflow 上还有其他一些帖子可以帮助您查找密钥。这是一个:stackoverflow.com/a/2948985/2812842
  • @scrowler 虽然这对字符串来说很好,但在实际实现中,这些值都将是单个类的实例(每个都有唯一的属性)。真正的问题是,我试图检索的值可能是 2 级深,也可能是 20 级深。

标签: php arrays recursion multidimensional-array


【解决方案1】:

如果我理解,您正在搜索: http://php.net/recursivearrayiteratorhttp://php.net/recursiveiteratoriterator

然后编写类似的代码:

$my_itera = new RecursiveIteratorIterator(new RecursiveArrayIterator($my_array));

$my_keys = array();

foreach ($my_itera as $my_key => $value) {


    for ($i = $my_itera->getDepth() - 1; $i >= 0; $i--) {
        $my_key = $my_itera->getSubIterator($i)->key() . '_' . $my_key;
    }
    $my_keys[] = $my_key;
}
var_export($my_keys);

我希望它有效。

【讨论】:

    猜你喜欢
    • 2013-02-02
    • 2016-12-13
    • 2017-09-15
    • 2016-06-04
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多