我有类似的数组
array(
"v"=>1,
"u"=>8,
"v1"=>45,
"v123"=>12
);
在我的程序中,我需要检查数组是否包含一个元素,其键以 v 开头,后跟数字。我的数组非常大,所以我不喜欢迭代。有没有其他有效的方法来做到这一点。我期望类似isset(arr[正则表达式]);
我有类似的数组
array(
"v"=>1,
"u"=>8,
"v1"=>45,
"v123"=>12
);
在我的程序中,我需要检查数组是否包含一个元素,其键以 v 开头,后跟数字。我的数组非常大,所以我不喜欢迭代。有没有其他有效的方法来做到这一点。我期望类似isset(arr[正则表达式]);
一个可能有效的肮脏技巧是:
array_keys()
获取所有密钥$data = array(
"v" =>1,
"u" =>8,
"v1" =>45,
"v123" =>12
);
$keys = array_keys($data);
$key_string = implode(',', $keys);
$matches = array();
preg_match('/^v[0-9]{0,}$/', $key_string, $matches);
或,缩短
$matches = array();
preg_match('/^v[0-9]{0,}$/', implode(',', array_keys($data)), $matches);
我不确定使用array_keys
&会对性能产生多大影响implode
,但它应该适合你。
您可以使用 array_filter (http://php.net/manual/en/function.array-filter.php)
首先创建一个回调函数:
function getKeys($n){
return preg_match('/^v[0-9]+$/', $n);
}
然后运行 array_filter:
$arr = array(
"v"=>1,
"u"=>8,
"v1"=>45,
"v123"=>12
);
$newArr = array_filter(array_keys($arr), "getKeys");
您可以使用正确的 array_keys 查看结果:
print_r($newArr);
如果你有结果,这个陈述应该是真的:
echo count($newArr) > 0;