【问题标题】:Get key level depth in a multi-dimensional array?获取多维数组中的关键级别深度?
【发布时间】:2013-06-19 03:36:28
【问题描述】:

我正在尝试搜索一个多维数组以返回深度/值以及它是否存在,但我遇到了一些麻烦..

我的数组有许多深度/维度。我将当前的多维数组存储在其他数组中。这是一个示例:

array(
        "UserInformation" => array(
                array ( 
                 "Username" => "Test_User",
                 "Warnings" => 0,
                 "Post_ID" => array (7726,2254)                      
                ),
                array (
                "Username" => "Another",
                "Warnings" => 2,
                "WarningID" => array(8874,1125),
                "Post_ID" => array (7726,2254)
                 ),
        ),
        "Mani" => 0,
        "Aut" => 1,
        "Wn" => 0,
        "RTV"=> array(
            "RunTime"=> "kk",
            "Run_2" => "e",
            "Perm"=>"p",
            "DEp"=>"d")
    );

现在,如果没有嵌套的 forforeach 循环,我将如何搜索整个数组索引?

我尝试过执行array_search,但这不会返回 aval,因为它只搜索第一个维度,而不是更深入?

【问题讨论】:

  • @zerkms 非常可耻的是,我从来没有完全理解拥有一个成功的功能来做到这一点的概念/实践
  • 就像@zerkms 所说,递归。或者您可以使用免费提供的迭代器 github.com/hakre/Iterator-Garden
  • @Daryl Gill:试试吧,我们会帮忙的

标签: php


【解决方案1】:

你应该试试这个。

function recursive_array_search($needle,$haystack) { 
    foreach($haystack as $key=>$value) { 
        $current_key=$key; 
        if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value))) { 
            return $current_key; 
        } 
    } 
    return false; 
} 

这里的 OR 是用来检查针值是否与你正在搜索的值相同。如果为真,它将直接返回键,如果不为真,它将首先检查该值是一个数组,然后通过使用新的嵌套数组更改其输入来递归地调用相同的函数。所以像这种方式它将递归地迭代数组的结束级别以找到值。

【讨论】:

  • 如果我必须解释函数中的所有语句,那么我会错过其他问题:)。谢谢@BenHarold
  • 其实是的。我 jist 了解一下使用and的原因,或者在这个函数内。会有其他用户可能不会,解释将是有益的
  • 我已经很匆忙地回答了这个问题,但我关心的是展示获得结果的方法。这就是为什么我向您展示一个搜索数组的递归调用。无论如何,如果它对你有帮助,对我来说就足够了。
  • @AmarBanerjee 这是我非常感激的事情。我会付诸实践,一会儿让你知道结果。但我担心导航到这个问题的其他用户(如果有的话)。不了解递归的概念和实践以及使用的函数的用户将毫无意义。 Stack Overflow 是一个档案多用途网站,它为不熟悉编程语言的用户提供信息/sn-ps。
  • 刚刚测试过了。它返回第一个键集的维度,例如:echo recursive_array_search("Another",$Test); 返回:“UserInformation”而不是:“UserInformation,2”。但是感谢基点,我将使用这个函数来获得我期望的回报
【解决方案2】:

对我有用的 Amar 修改代码:

/*
 * recusrive array search 
 * @param array $array
 * @param string $needle
 * @return string|int:
 */

public function recursiveFind(array $array, $needle)
{
    $iterator = new RecursiveIteratorIterator(
            new RecursiveArrayIterator($array),
            RecursiveIteratorIterator::SELF_FIRST
    );

    foreach ($iterator as $key => $item) {
        $current_key = $key;
        if (is_array($item) && $key === $needle) {
            return $current_key;
        }
    }
}

在这个代码案例中,我需要 ID (int) 或继续查找数组(字符串),直到找到一个

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-02
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2019-06-25
    • 2011-12-14
    • 1970-01-01
    相关资源
    最近更新 更多