搜索多个字符串的数组?
Search array for multiple strings?
我正在搜索 IF 与电子邮件域匹配的字符串是否存在于记录集中。
$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
我从那个数组创建了一个新数组,其中只有电子邮件 col:
$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
内的值内。您可以使用嵌套的 array_reduce
, using strpos
来检查匹配项:
$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
循环:
$found = false;
foreach ($outsideService as $OS) {
foreach ($DepartingOS as $DOS) {
if (strpos($DOS, $OS) !== false) {
$found = true;
break 2;
}
}
}
if ($found) {
echo "True";
}
我正在搜索 IF 与电子邮件域匹配的字符串是否存在于记录集中。
$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
我从那个数组创建了一个新数组,其中只有电子邮件 col:
$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
内的值内。您可以使用嵌套的 array_reduce
, using strpos
来检查匹配项:
$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
循环:
$found = false;
foreach ($outsideService as $OS) {
foreach ($DepartingOS as $DOS) {
if (strpos($DOS, $OS) !== false) {
$found = true;
break 2;
}
}
}
if ($found) {
echo "True";
}