获取多维数组中的关键级别深度?

时间:2013-06-19 03:36:29

标签: php

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

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

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,因为它只搜索第一维,而不是更深入?

2 个答案:

答案 0 :(得分:2)

你应该试试这个。

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; 
} 

此处用于检查针值是否与您正在搜索的值相同。如果为真,它将直接返回密钥,如果不是真的,它将首先检查该值是否为数组,然后通过使用新的嵌套数组更改其输入来递归调用相同的函数。因此,像这样,它将迭代迭代数组的结束级别以查找值。

答案 1 :(得分:0)

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)或继续查看数组(字符串),直到我到达