我有一个数组,我想检查一下这些键是否有' -main'在他们之后。
foreach ($data as $key => $value) {
if (substr($key, -5) == '-main'){
....
}
}
如果他们确实有' -main'然后我想在' -main'之前得到文本。我这样做:
$myVar = substr($key, 0, -5);
是否有更有效的方式来分割密钥,因此我不必做两个子字符串?
也许我不想使用' -main'更多,并希望使用不同长度的搜索项,也许作为变量。然后我必须进行字符计数而不是指定-5。有没有办法合并变量而不必进行字符计数?
答案 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);
}