我有一个看起来像这样的数组:
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)
您可以将其包装在函数中并将模式作为参数传递
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_key和array_flip提取与模式匹配的数组切片
$vals = array_intersect_key( $array, array_flip( preg_grep( '/^2\.\d/i', array_keys( $array ) ) ) );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23969 次 |
| 最近记录: |