当前位置: 首页> 最新文章列表> 自定义函数实现多关键词版的 stripos

自定义函数实现多关键词版的 stripos

M66 2025-05-18

在PHP中,stripos 函数用于查找一个字符串在另一个字符串中第一次出现的位置(忽略大小写)。但是,默认情况下,它只能查找一个关键词。如果我们需要在一个字符串中查找多个关键词,并且返回它们的位置或匹配情况,就需要自定义一个函数来实现这个功能。

实现思路

我们可以通过遍历多个关键词,并调用 stripos 函数来检查每个关键词在目标字符串中的位置。如果某个关键词被找到,就将该位置记录下来。最终,我们可以返回所有关键词的匹配结果。这里,我们将使用数组来存储多个关键词的查找结果,并返回它们的位置或其他相关信息。

PHP 代码实现

下面是一个简单的自定义函数实现,它支持在字符串中查找多个关键词并返回它们的匹配结果。

<?php

/**
 * 自定义函数:支持多个关键词的 stripos 功能
 *
 * @param string $haystack 目标字符串
 * @param array $needles 要查找的关键词数组
 * @return array 返回一个关联数组,包含每个关键词的位置
 */
function multi_stripos($haystack, $needles) {
    $results = [];

    foreach ($needles as $needle) {
        $position = stripos($haystack, $needle);
        if ($position !== false) {
            $results[$needle] = $position;
        } else {
            $results[$needle] = null;  // 如果没有找到关键词,返回 null
        }
    }

    return $results;
}

// 示例:使用函数查找多个关键词
$text = "欢迎访问我们的网站,m66.net提供了丰富的资源。";
$keywords = ["m66.net", "资源", "PHP"];

$matches = multi_stripos($text, $keywords);

// 输出结果
foreach ($matches as $keyword => $position) {
    if ($position !== null) {
        echo "关键词 '{$keyword}' 在位置 {$position} 被找到。\n";
    } else {
        echo "关键词 '{$keyword}' 未找到。\n";
    }
}

?>

代码解析

  1. 函数定义

    • 我们定义了一个名为 multi_stripos 的函数,它接收两个参数:

      • $haystack:目标字符串。

      • $needles:一个包含多个关键词的数组。

    • 函数内部,我们使用 foreach 循环遍历每一个关键词,调用 stripos 函数来查找该关键词在 $haystack 中的第一次出现位置。

    • 如果找到了该关键词,我们将其位置存入结果数组 $results 中。如果没找到,则返回 null,表示没有匹配。

  2. 函数调用

    • 在示例中,我们定义了一个目标字符串 $text,它包含了网站的 URL 和一些描述性的文本。

    • 我们定义了一个包含多个关键词的数组 $keywords,并将它传递给 multi_stripos 函数来获取所有关键词的位置。

  3. 结果输出

    • 我们遍历返回的结果数组,输出每个关键词的匹配位置。如果某个关键词没有找到,我们也会输出相应的提示信息。

运行结果

关键词 'm66.net' 在位置 15 被找到。
关键词 '资源' 在位置 22 被找到。
关键词 'PHP' 未找到。

应用场景

这个自定义函数非常适合用于以下几种情况:

  • 多个关键词查找:当你需要在文本中查找多个关键词时,这个函数会非常有用。

  • 性能优化:与多次调用 stripos 相比,这种方法能集中处理多个查找操作,从而提高代码的可读性和可维护性。

  • 关键词匹配位置获取:除了查找位置,你还可以扩展函数,返回更多的信息,如匹配的完整词语或其上下文等。

小结

通过自定义一个支持多个关键词查找的 stripos 函数,我们能够有效地解决同时查找多个关键词的问题。此方法不仅简单而且灵活,可根据实际需求进一步扩展功能。