php检查是否声明了动态生成的变量

时间:2012-08-02 14:16:58

标签: php regex associative-array

我有像

这样的数组
array(
    "v"=>1,
    "u"=>8,
    "v1"=>45,
    "v123"=>12
);

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

2 个答案:

答案 0 :(得分:2)

可能有效的肮脏黑客将是:

  1. 使用array_keys()获取所有密钥
  2. 内嵌生成的数组键
  3. 对结果字符串执行REGEX。
  4. $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);
    

    OR,缩短

    $matches    = array();
    preg_match('/^v[0-9]{0,}$/', implode(',', array_keys($data)), $matches);
    

    我不确定使用array_keys& implode,但它应该适合你。

答案 1 :(得分: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;