拆分数组键并查看它是否包含值

时间:2016-12-12 16:14:54

标签: php

我有一个数组,我想检查一下这些键是否有' -main'在他们之后。

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

如果他们确实有' -main'然后我想在' -main'之前得到文本。我这样做:

$myVar = substr($key, 0, -5);
  1. 是否有更有效的方式来分割密钥,因此我不必做两个子字符串?

  2. 也许我不想使用' -main'更多,并希望使用不同长度的搜索项,也许作为变量。然后我必须进行字符计数而不是指定-5。有没有办法合并变量而不必进行字符计数?

1 个答案:

答案 0 :(得分:1)

还有其他方法,但我认为最容易测试和捕获的方法是:

$needle = '-main';

foreach ($data as $key => $value) {
    if (preg_match("/(.*)$needle\$/", $key, $match)){
        $myVar = $match[1];
    }
}
  • 检查字符串$needle末尾的$匹配并捕获其前面的所有内容(.*)
  • 如果找到,请将第一个捕获组(.*)中的内容分配给$myVar

您也可以使用strstr(),但如果找不到$myVar,则需要决定如何处理$needle为假:

if ($myVar = strstr($key, $needle, true)){
    ....
}

要在$key中的任何位置找到它并捕获其他所有内容:

if (strpos($key, $needle) !== false){
    $myVar = str_replace($needle, '', $key);
}