當前位置: 首頁> 最新文章列表> 自定義函數實現多關鍵詞版的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函數,我們能夠有效地解決同時查找多個關鍵詞的問題。此方法不僅簡單而且靈活,可根據實際需求進一步擴展功能。