PHP在多维数组中搜索Key

问题描述 投票:0回答:4

我有这个:

Array
(
    [carx] => Array
        (
            [no] => 63

        )

    [cary] => Array
           (
           [no] => 64

           )
)

当我有 no=63 时,如何找到钥匙车?我知道如何使用

array_search()
但这有点棘手。就像我可以找到键名
id
而我有
63
但这有点棘手。

有人可以帮助我吗?

php arrays search multidimensional-array
4个回答
1
投票
foreach ($array as $i => $v) $array[$i] = $v['no'];
$key = array_search(63, $array);

0
投票

所以你没有第一级的 id 键,所以循环遍历,当你找到匹配项时停止循环并突破 foreach

$id = 0;
$needle = 63;
foreach($array as $i => $v)
{
    if ($v['no'] == $needle)
    {
        $id = $i;
        break 1;
    }
}
// do what like with any other nested parts now
print_r($array[$id]);

然后你可以使用该键来获取整个嵌套数组。


0
投票

这个有什么用吗?我用它对数组和对象进行通用搜索。注意:它没有经过速度/压力测试。有任何明显的问题欢迎指出。

function arrayKeySearch(array $haystack, string $search_key, &$output_value, int $occurence = 1){
    $result             = false;
    $search_occurences  = 0;
    $output_value       = null;
    if($occurence < 1){ $occurence = 1; }
    foreach($haystack as $key => $value){
        if($key == $search_key){
            $search_occurences++;
            if($search_occurences == $occurence){
                $result         = true;
                $output_value = $value;
                break;
            }
        }else if(is_array($value) || is_object($value)){
            if(is_object($value)){
                $value = (array)$value;
            }
            $result = arrayKeySearch($value, $search_key, $output_value, $occurence);
            if($result){
                break;
            }
        }
    }
    return $result;
}

0
投票

当搜索整行值时,

array_search()
是合适的。如果没有匹配,该函数将返回
false
演示

$array = [
    'carx' => ['no' => 63],
    'cary' => ['no' => 64],
];

var_export(
    array_search(['no' => 63], $array)
);
// 'carx'

从 PHP8.4 开始,

array_find_key()
具有相同的高性能机制,但提供更细粒度的工具,如果没有匹配,它会返回
null
演示

var_export(
    array_find_key(
        $array,
        fn($row) => $row['no'] === 63
    )
);
// 'carx'
© www.soinside.com 2019 - 2024. All rights reserved.