Php 在数组中搜索多个字符串?
我正在搜索记录集中是否存在与电子邮件域匹配的字符串 $outsideService是我们需要寻找的一系列针头:Php 在数组中搜索多个字符串?,php,arrays,preg-match,Php,Arrays,Preg Match,我正在搜索记录集中是否存在与电子邮件域匹配的字符串 $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 arr
$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] => ivchan630@gmail.com
[1] => mplotn.346854@guest.booking.com
[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内的值中。可以使用嵌套的,用于检查匹配的:
$outsideService = array('guest.booking.com','vrbo.com');
$DepartingOS = array('ivchan630@gmail.com', 'mplotn.346854@guest.booking.com', '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循环:
是的,这是有效的,尽管我很难理解和学习。$c指的是什么缩写?@Burndog我道歉。有时我会对PHPs数组函数着迷。无论如何,为了回答你的问题,$c是一个累加器,它只跟踪我们是否找到匹配的当前状态;它是数组_reduce最终返回的值。但我用一个简单的嵌套foreach循环编辑了我的答案,这可能是更好的代码。
$found = false;
foreach ($outsideService as $OS) {
foreach ($DepartingOS as $DOS) {
if (strpos($DOS, $OS) !== false) {
$found = true;
break 2;
}
}
}
if ($found) {
echo "True";
}