php - 使用 PHP 搜索包含值数组的字符串

标签 php regex

我正在尝试搜索文件列表,并且只对名称中包含数组中几个值的文件执行操作。我希望每次有新文件名时都不必遍历数组。
阿拉-

$needle = array('blah', 'bleh');
foreach($file_list as $file)
{
    foreach($needle as $need)
       if(strstr($file, $need) !== false)
          {
             // do something...
          }
}

我只需要知道数组中的字符串之一是否在文件名中,而不是字符串的位置。

我想使用类似于 strstr() 的东西,但它不允许将数组用作指针。

即-

if(strstr($haystack, array('blah', 'bleh')))
{
   // do something...
}

我宁愿远离正则表达式,它似乎是锤子工作的雪橇。有什么想法吗?

最佳答案

IMO 在这里使用正则表达式没问题:

$pattern  = '/' . implode('|', array_map('preg_quote', $needle)) . '/i';

foreach($file_list as $file) {
    if(preg_match($pattern, $file)) {
    // do something
    }
}

引用:preg_quote


这是一种更“有创意”的方法(但它使用内部循环并且很可能更慢,因为您实际上在数组上循环了几次):

function cstrstr($haystack, $needle) {
    return strstr($haystack, $needle) !== false;
}

foreach($file_list as $file) {
    if(array_sum(array_map('cstrstr', 
                       array_pad(array($file), count($needle), $file), 
                       $needle))) {
        // do something
    }
}

但正则表达式的优势应该是显而易见的:您只需创建模式一次,而在“有趣”的解决方案中,您总是必须创建长度为 count($ needle) 用于每个 $file

关于php - 使用 PHP 搜索包含值数组的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4547478/

相关文章:

php - 从 mysql 读取图像 blob 并显示它

java - java中句子中前三个字母的正则表达式

Webmethods 中的正则表达式修饰符

java - 包 java.util.regex 不存在(代号one)

ruby - 验证字符串仅包含 Ruby 中允许的字符

java - 我将如何在 Java 中拆分一个句子

php - $_POST 数组为空,出现 undefined variable 错误

PHP REGEX - 在换行符处按 preg_split 排列的文本

php - 使用 JWT 缺少授权 header

php - 使用 youtube api v3 验证视频是否存在