搜索多个字符串的数组?

问题描述 投票:0回答:1

我正在搜索记录集中是否存在与电子邮件域匹配的字符串。

$ 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错误吗?我将如何在记录集数组中搜索针?

php arrays preg-match
1个回答
1
投票

您真正需要做的是迭代每个数组,检查$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

© www.soinside.com 2019 - 2024. All rights reserved.