Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在数组中搜索多个字符串?_Php_Arrays_Preg Match - Fatal编程技术网

Php 在数组中搜索多个字符串?

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是我们需要寻找的一系列针头:

$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";
}