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

php-在数组中查找与模式匹配的键,php,Php,我有一个数组,看起来像: Array ( [2.5] => ABDE [4.8] => Some other value ) 如何找到键与模式匹配的任何键/值对?我将知道密钥中第一个数字的值,但不知道第二个数字的值。例如,使用前缀“2”,我希望能够找到键“2.5”,并返回键和值“ABDE” 我在考虑使用一个正则表达式,其模式如下: $prefix = 2; $pattern = '/'.$prefix.'\.\d/i'; 然后在数组中循环并检查每个键。(顺便说一句,仅出于演示

我有一个数组,看起来像:

 Array ( [2.5] => ABDE [4.8] => Some other value ) 
如何找到键与模式匹配的任何键/值对?我将知道密钥中第一个数字的值,但不知道第二个数字的值。例如,使用前缀“2”,我希望能够找到键“2.5”,并返回键和值“ABDE”

我在考虑使用一个正则表达式,其模式如下:

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

我想知道有没有更简单的方法


谢谢

您只需在数组中循环并检查键即可

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

foreach($array as $key => $value) {
    if (preg_match($pattern,$key)){
        // it matches
    }
}

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

我认为您需要这样的东西:

$keys = array_keys($array);
$result = preg_grep($pattern, $keys);
结果将是一个数组,其中包含与正则表达式匹配的所有键。这些键可用于检索相应的值


看看函数。

老问题,但我喜欢做以下几点:

$array = [ '2.5' => 'ABDE', '4.8' => 'Some other value' ];
preg\u grep
+
array\u keys
将找到所有键

$keys = preg_grep( '/^2\.\d/i', array_keys( $array ) );
您可以添加
array\u intersect\u key
array\u flip
以提取与阵列匹配的阵列切片

$vals = array_intersect_key( $array, array_flip( preg_grep( '/^2\.\d/i', array_keys( $array ) ) ) );
这就是我的方式

$data = ["path"=>"folder","filename"=>"folder/file.txt","required"=>false];

// FIRST WAY

$keys = array_keys($data);
if (!in_array("path", $keys) && !in_array("filename",$keys) && !in_array("required",$keys)) {
    return myReturn(false, "Dados pendentes");
}

// SECOND WAY

$keys = implode("," array_keys($data));
if (!preg_match('/(path)|(filename)|(required)/'), $keys) {
    return myReturn(false, "Dados pendentes");
}

要仅获取具有匹配键的数组部分,还可以编写

$matching_array = array_flip(preg_grep($pattern, array_flip($your_array)));

如果阵列太大,这可能会导致性能方面的问题。

对于遇到相同问题的未来程序员。这里有一个更完整的解决方案,它不使用任何循环

    $array = ['2.5'=> 'ABCDE', '2.9'=>'QWERTY'];
    $keys = array_keys($array);
    $matchingKeys = preg_grep('/^2\.+/', $keys);
    $filteredArray = array_intersect_key($array, array_flip($matchingKeys));
    print_r($filteredArray);
PHP中有一个正则表达式库,它是一个
preg::grep_keys()
方法


如果前缀依赖于用户输入,那么它可以是任何内容,对吗?用户可以输入a.a、a.*还是将用户限制为2.*、3.*、5(数字)?如果他们只限于人数,他们是否只限于十分之一?最后,键([2.5])是看起来像双倍的还是字符串?有没有办法避免循环?这不是正确的答案,正确的答案可以在下面找到,JvdBerg有正确的答案。PHP中有一个函数专门用于在数组中查找匹配的键。数组_键是我所需要的+1这将覆盖
$your\u数组中的重复值。