我有个问题。我不知道是什么原因。我想做的是知道数组的一个元素是否有一个特定的单词,我使用这个正则表达式/.*example.*/
,这是代码:
$array = ['example1', '2example', 'no'];
$matches = [];
$var = "example";
foreach($array as $element)
{
preg_match("/.*$var.*/", $element, $matches);
}
但是当我运行上面的代码并看到$matches
的值时,它是一个空数组。我做错了什么?
这是因为您正在循环$array
,并可能在循环后打印结果。
所以$matches
只包含$array
中最后一个项目的匹配元素。但由于'no'是最后一个元素,并且它不满足regex要求,所以$matches
为空。
为了更好地了解正在发生的事情,请在调用preg_matches()
之后,尝试在循环中使用print_r($matches)
。
然后,试着在循环后调用它,看看有什么不同。
您需要两个变量。一个是当前匹配的结果,另一个是所有匹配的列表。每次通话后,您可以将当前匹配的结果推送到列表中。
$array = ['example1', '2example', 'no'];
$matches = [];
$var = "example";
foreach($array as $element)
{
if (preg_match("/.*$var.*/", $element, $match)) {
$matches[] = $match[0];
}
}
print_r($matches);