检查数组键是否包含值?

时间:2016-12-12 16:20:48

标签: php

我有一个数组,我想检查一下键后面是否有“-main”。

foreach ($data as $key => $value) {
    if (substr($key, -5) == '-main'){
        ....
    }
}

如果他们确实有'-main',那么我想在'-main'之前获取文本。我这样做:

$myVar = substr($key, 0, -5);

是否有更有效的方法来分割密钥,所以我不必做两个子字符串? 也许我不想再使用'-main'并且想要使用不同长度的搜索项,可能作为变量。然后我必须进行字符计数而不是指定-5。有没有办法合并变量而不必进行字符计数?

1 个答案:

答案 0 :(得分:0)

您可以使用正则表达式搜索(http://php.net/manual/de/function.preg-match.php)来完成任务。

if (preg_match('/^(.*)(-main)$/', $key, $hit)) {
   $myVar = $hit[1];
   // explanation:
   // $hit[0] will contain the whole result string
   // $hit[1] will contain the part before "-main"
   // $hit[2] will be "-main"
}

正则表达式如下:

  • / ... / - >受到preg_match的好评
  • ^ - >字符串的开头(我们想从第一个位置开始
  • ( - main) - >我们正在使用的搜索文本
  • $ - >字符串的结尾(我们不希望字符串中间的-main匹配)
  • (。*)开头和" -main"之间的字符串中的任何其他内容 - paranthesis意味着,这将作为$ hits
  • 的一部分返回

如果您切换要搜索的文本,请记住某些字符在正则表达式中具有特殊含义。所以你可能需要逃避它们。