在PHP中, stripos函數用於查找一個字符串在另一個字符串中第一次出現的位置(忽略大小寫)。但是,默認情況下,它只能查找一個關鍵詞。如果我們需要在一個字符串中查找多個關鍵詞,並且返回它們的位置或匹配情況,就需要自定義一個函數來實現這個功能。
我們可以通過遍歷多個關鍵詞,並調用stripos函數來檢查每個關鍵詞在目標字符串中的位置。如果某個關鍵詞被找到,就將該位置記錄下來。最終,我們可以返回所有關鍵詞的匹配結果。這裡,我們將使用數組來存儲多個關鍵詞的查找結果,並返回它們的位置或其他相關信息。
下面是一個簡單的自定義函數實現,它支持在字符串中查找多個關鍵詞並返回它們的匹配結果。
<?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";
}
}
?>
函數定義:
我們定義了一個名為multi_stripos的函數,它接收兩個參數:
$haystack :目標字符串。
$needles :一個包含多個關鍵詞的數組。
函數內部,我們使用foreach循環遍歷每一個關鍵詞,調用stripos函數來查找該關鍵詞在$haystack中的第一次出現位置。
如果找到了該關鍵詞,我們將其位置存入結果數組$results中。如果沒找到,則返回null ,表示沒有匹配。
函數調用:
在示例中,我們定義了一個目標字符串$text ,它包含了網站的URL 和一些描述性的文本。
我們定義了一個包含多個關鍵詞的數組$keywords ,並將它傳遞給multi_stripos函數來獲取所有關鍵詞的位置。
結果輸出:
我們遍歷返回的結果數組,輸出每個關鍵詞的匹配位置。如果某個關鍵詞沒有找到,我們也會輸出相應的提示信息。
關鍵詞 'm66.net' 在位置 15 被找到。
關鍵詞 '資源' 在位置 22 被找到。
關鍵詞 'PHP' 未找到。
這個自定義函數非常適合用於以下幾種情況:
多個關鍵詞查找:當你需要在文本中查找多個關鍵詞時,這個函數會非常有用。
性能優化:與多次調用stripos相比,這種方法能集中處理多個查找操作,從而提高代碼的可讀性和可維護性。
關鍵詞匹配位置獲取:除了查找位置,你還可以擴展函數,返回更多的信息,如匹配的完整詞語或其上下文等。
通過自定義一個支持多個關鍵詞查找的stripos函數,我們能夠有效地解決同時查找多個關鍵詞的問題。此方法不僅簡單而且靈活,可根據實際需求進一步擴展功能。