在多维PHP数组中的任意位置按键搜索值[重复]

unhi4e5o  于 2023-04-04  发布在  PHP
关注(0)|答案(1)|浏览(133)

此问题在此处已有答案

Search for a key in an array, recursively(8个答案)
20小时前关门了。
此帖子在19小时前编辑并提交审查。
我有一个变量形式的多维数组,我需要找到键为mykey的值,而不知道它们在哪里或有多少个:

$array = array(
    0 => 'A',
    1 => 'B',
    2 => 'C',
    'foo' => 'bar',
    'mykey' => 'haha',
    'test' => array(
        'example' => 'lol',
        'mykey' => 'hoho',
    ),
    'random' => array(
        array(
            'mykey' => 'hehe',
            'notmykey' => 'topkek',
        ),
        array(
            'mykey' => 'huhu',
            'notmykey' => 'topkek',
        ),
    ),
);

我不想通过值来查找键,或者只是看看键是否存在,就像我在stackoverflow上找到的大多数问题一样,我特别想找到给定键的所有值。
解决方案应返回“哈哈”、“呵呵”、“呵呵”和“呵呵”。

sd2nnvve

sd2nnvve1#

我的解决方案是:

function find_value_by_key($key,$array) {
    $data = array('key'=>$key,'ret'=>array());
    array_walk_recursive($array,function($v,$k) use (&$data) {
        if ($k==$data['key'] and $v)
            $data['ret'][] = $v;
    },$data);
    return $data['ret'];
}

返回["haha","hoho","hehe","huhu"]
如果没有找到键,则返回一个空数组。
如果你只需要返回它找到的第一个值,你可以用途:

function find_value_by_key($key,$array) {
        $data = array('key'=>$key,'ret'=>false);
        array_walk_recursive($array,function($v,$k) use (&$data) {
            if ($data['ret'])
                return;
            if ($k==$data['key'] and $v)
                $data['ret'] = $v;
        },$data);
        return $data['ret'];
}

返回"haha"
如果没有找到密钥,则返回false

相关问题