php - 在数组中查找与模式匹配的键

dot*_*dot 16 php

我有一个看起来像这样的数组:

 Array ( [2.5] => ABDE [4.8] => Some other value ) 
Run Code Online (Sandbox Code Playgroud)

如何找到密钥与模式匹配的任何键/值对?我会知道键中第一个数字的值,但不知道第二个数字的值.所以例如,使用前缀"2.",我想以某种方式能够找到键"2.5"并返回键和值"ABDE".

我正在考虑使用带有如下模式的正则表达式:

$prefix = 2;
$pattern = '/'.$prefix.'\.\d/i';
Run Code Online (Sandbox Code Playgroud)

然后循环遍历数组并检查每个键.(顺便说一句,仅出于演示目的,$ prefix已经硬编码为2,但在实际系统中,这是用户输入提供的值).

我想知道是否有更简单的方法来做到这一点?

谢谢.

Jvd*_*erg 44

我想你需要这样的东西:

$keys = array_keys($array);
$result = preg_grep($pattern, $keys);
Run Code Online (Sandbox Code Playgroud)

结果将是一个包含与正则表达式匹配的所有键的数组.密钥可用于检索相应的值.

看看preg_grep函数.


Ibu*_*Ibu 14

你可以简单地遍历数组并检查密钥

$array = array(...your values...);

foreach($array as $key => $value) {
    if (preg_match($pattern,$key)){
        // it matches
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以将其包装在函数中并将模式作为参数传递

  • 这不是正确的,正确的可以找到更低的,JvdBerg是正确的.PHP中有一个专门用于查找数组中匹配键的函数 (3认同)

Nic*_*k B 10

老问题,但这是我喜欢做的事情:

$array = [ '2.5' => 'ABDE', '4.8' => 'Some other value' ];
Run Code Online (Sandbox Code Playgroud)

preg_grep+ array_keys会找到所有键

$keys = preg_grep( '/^2\.\d/i', array_keys( $array ) );
Run Code Online (Sandbox Code Playgroud)

您可以添加array_intersect_keyarray_flip提取与模式匹配的数组切片

$vals = array_intersect_key( $array, array_flip( preg_grep( '/^2\.\d/i', array_keys( $array ) ) ) );
Run Code Online (Sandbox Code Playgroud)