繁体   English   中英

在数组中搜索键(PHP)

[英]search for a key in an array (PHP)

如何在包含更多数组的数组中搜索键。 例如,我想在“ arr”中搜索“ key”并返回:

arr["some_inner_array"]["another_array_possible"][key"]

array_key_exists可以告诉我它是否存在,但是当然我真正需要的是值...

我希望我的问题很清楚...

编辑:基于下面的答案,我设法做到这一点的递归函数:

function look_in_array ( $array, $key ) {  
            if  ( isset($array[$key]) )
                return $array[$key];
    foreach ($array as $item) {
        if (is_array($item)) {
            $value = look_in_array ($item,$key);
            if ($value)
                return $value;
        }              
    }
}

此功能应该起作用:

function array_key_exists_recursive($searchKey, $array)
{
    $result = false;

    foreach($array as $key => $value)
    {
        if(is_array($array[$key]))
        {
            $result = array_key_exists_recursive($searchKey, $array[$key]);
        }
        else if(array_key_exists($searchKey, $array))
        {
            $result = $array[$searchKey];
        }

        if($result)
            break;
    }
    return $result;
}

范例:

$array = array( "a" => array("b" => "1", "c" => "2") );


var_dump(array_key_exists_recursive("c", $array)); //Result: 2

您可以问一下:

isset(arr["some_inner_array"]["another_array_possible"]["key"])

这对您有用吗? 否则,也许可以更好地说明您要完成的工作,这将有助于我们帮助您:)

您需要遍历第一个数组中的所有元素,然后使用array_key_exists()

foreach($arr as $inner1) {
    foreach($inner1 as $inner2) {
        if array_key_exists($inner2, $key) {
            echo $inner2[$key];
            break 2; // if you only want the first match
        }
    }
}

尝试这个:

/**
 * @param $path array containing path
 * @param $array search array
 * @return element matching path or null
 */
function arr_search($path, &$array){
    $tmp = &$array;
    for($i = 0; $i < count($path); $i++){
        if(!isset($tmp[$path[$i]])) return null;
        $tmp = &$tmp[$path[$i]];
    }
    return $tmp;
}
$arr = array(
    'a' => array(
        'b' => array(
            'c' => 'abc',
        ),
        'd' => array('ad'),
    ),
    10 => array(100, 200, 300), 

);
var_dump(arr_search(array('a', 'b', 'c'), $arr));

var_dump(arr_search(array('a', 'd'), $arr));

var_dump(arr_search(array(10, 100), $arr));

var_dump(arr_search(array(10, 1), $arr));

//编辑前面的示例是错误的,所以这是新示例:)

function arr_search($key, $array){
    $values = array();
    if(array_key_exists($key, $array)) $values[] = $array[$key];
    $stack = array_values($array);
    while($tmp = array_pop($stack)){
        if(is_array($tmp)){
            foreach($tmp as &$v){
                array_push($stack, $v);
            }
            if(array_key_exists($key, $tmp)){
                $values[] = $tmp[$key];
            }
        }
    }
    return $values;
}
$arr = array(
    'a' => array(
        'b' => array(
            'c' => 'abc',
        ),
        'd' => array('ad'),
    ),
    'e' => array(
        'a' => array(
            'b' => 'abc',
        ),
        'b' => array('xyz'),
    ),

    10 => array(100, 200, 300), 

);
var_dump(arr_search('b', $arr));

var_dump(arr_search(0, $arr));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM