我正在搜索记录集中是否存在与电子邮件域匹配的字符串。
$ outsideService是我们要寻找的针阵列:
$outsideService = array('guest.booking.com','vrbo.com'); // Add outside services to screen for not having emails in DB
我的记录集数组是$ OS,如下所示:
$OS = ($Departing->Results); // Gather recordset array
从该数组中,我仅用电子邮件栏创建了一个新数组:
$DepartingOS = array_column($OS, 'email'); // [index, value]
结果(干草堆):
Array
(
[0] => [email protected]
[1] => [email protected]
[2] => 0
)
所以现在我需要比较看看针头是否在干草堆中:
if(preg_match($outsideService, $DepartingOS)) {
echo ’True’;
}
这没有用。我相信问题是preg_match不能像干草堆一样使用数组吗?这意味着我需要每次循环遍历数组以寻找针头。
但是我也尝试了这种方法,即手动设置针但仍然没有运气。
if(preg_match('(guest.booking.com|vrbo.com)', $DepartingOS)===1) {
echo 'True';
}
我使用preg_match错误吗?我将如何在记录集数组中搜索针?
您真正需要做的是迭代每个数组,检查$outsideService
的值是否位于$DepartingOS
内部的值内。您可以使用array_reduce
嵌套,使用array_reduce
检查匹配项:
strpos
输出:
strpos
这也可以更简单地编写为嵌套的$outsideService = array('guest.booking.com','vrbo.com');
$DepartingOS = array('[email protected]', '[email protected]', '0');
if (array_reduce($outsideService, function ($c, $OS) use ($DepartingOS) {
return $c || array_reduce($DepartingOS, function ($c, $DOS) use ($OS) {
return $c || (strpos($DOS, $OS) !== false);
}, false);
}, false)) {
echo "True";
}
循环:
True
foreach