preg_match数组键值的一部分

时间:2014-06-12 11:29:25

标签: php arrays

我试图找到一种方法来检查给定键的值是否存在于数组中(在foreach循环内)。

出于某种原因,它并没有像预期的那样真正发挥作用。

我的想法是我已经知道密钥的名称,但只知道密钥的相关值的一部分。

我试图做这样的事情,假设我知道密钥是" exampleKeyName"其值可能包含或不包含" matchValue":

foreach( $array as $key => $value) {
  if (stripos($array["exampleKeyName"], 'matchValue') !== false) { echo "matched"; }
}

这将返回"非法字符串偏移"。

但是,如果我这样做,它可以工作:

foreach( $array as $key => $value) {
  if (stripos($value, 'matchValue') !== false) { echo "matched"; }
}

这里的问题是我希望对查询更具体,并且只检查密钥是否为" exampleKeyName"。

3 个答案:

答案 0 :(得分:1)

您可以使用stripos检查匹配字符串中包含的数组值,如下所示:

foreach( $array as $key => $value) {
  if (stripos($array[$key], 'matchValue') !== false) { echo "matched"; }
}

答案 1 :(得分:0)

如果要检查正则表达式模式是否与数组中的特定值匹配:

if(preg_match("/^yourpattern$/",$myArray["exampleKeyName"])>0) {
    // The value of $myArray["exampleKeyName"] is matched by the regex
}

如果检查正则表达式是否与键匹配:

foreach($myArray as $key => $value):
    if(preg_match("/^yourpattern$/",$key)>0) {
        // $key is matched by the regex
    }
endforeach;

我希望它有所帮助!

编辑:糟糕的英语

答案 2 :(得分:0)

你并不遥远,有几种方法可以做到这一点。

在您的示例代码中,您并未检查key,而是检查value两种情况。在执行for循环时,您需要更改if语句,以检查key

if (stripos($key, 'matchValue') !== false) { echo "matched"; }

由于我不知道这个应用是什么,我只是告诉你其他一些实现这个目标的方法,也许它们也有助于简化代码。

php有一个名为array_key_exists的辅助函数,用于检查数组中是否存在给定的键或索引。结果是一个布尔值。如果您只需要知道数组是否包含索引或键,这是另一种方法。这看起来像这样:

if( array_key_exists('matchValue', $array) ) { 
    print('Key exists');
} else {
    print('No key found');
}

如果您需要使用正则表达式,那么有一个很好的Stack Overflow posting about using preg_grep for regex searching of array个键可能也会有所帮助。