2

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

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

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

4

2 回答 2

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

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

于 2013-06-19T03:46:49.010 回答
0

Amar's modified code which worked for me:

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

in this code case I needed ID (int) or keep looking in array (string) until I reach the one

于 2014-05-22T10:16:26.177 回答