-1

我有类似的数组

array(
    "v"=>1,
    "u"=>8,
    "v1"=>45,
    "v123"=>12
);

在我的程序中,我需要检查数组是否包含一个元素,其键以 v 开头,后跟数字。我的数组非常大,所以我不喜欢迭代。有没有其他有效的方法来做到这一点。我期望类似isset(arr[正则表达式]);

4

2 回答 2

2

一个可能有效的肮脏技巧是:

  1. 用于array_keys()获取所有密钥
  2. 内爆生成的数组键
  3. 对该结果字符串执行 REGEX。
$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,但它应该适合你。

于 2012-08-02T14:27:36.687 回答
1

您可以使用 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;
于 2012-08-02T14:37:49.110 回答