簡體   English   中英

用php檢查字符串是否包含數組中的所有值

[英]Check if string contains all values in array with php

到目前為止我所擁有的:

$searchQuery = "keyword1 keyword2";
$searchArray = explode(" ", $searchQuery);
$stringToCheck = "keyword1 keyword3 keyword2";
foreach ($searchArray as $searchKeyword) {
    if (strpos($stringToCheck, $searchKeyword) !== false) : 
    //do something
    endif;
}
endif;

我想要的是僅當搜索查詢中的所有值都在字符串中找到時才顯示一些內容。 使用上面我當前的代碼,如果字符串包含關鍵字 1 和關鍵字 2,它會“做某事”兩次,每次匹配一次。 如果字符串僅包含關鍵字 1 但不包含關鍵字 2,它也會出現,在這種情況下,它會顯示一次內容。

function str_contains_all($haystack, array $needles) {
    foreach ($needles as $needle) {
        if (strpos($haystack, $needle) === false) {
            return false;
        }
    }
    return true;
}

用法:

$haystack = 'foo, bar, baz';
$needles = array('foo', 'bar', 'baz');

if (str_contains_all($haystack, $needles)) {
    echo "Success\n";
    // ...
}

筆記

由於您指定希望在“干草堆”字符串包含所有子字符串“ needles”時執行操作,因此一旦發現不在干草堆中的針頭,就可以安全地返回false

其他

使用if (...): /* ... */ endif; 根據我的經驗,在PHP中相當罕見。 我認為大多數開發人員都希望使用if (...) { /* ... */ }語法的C樣式。

對於任何可能需要另一種方式的人。 我在尋找解決方案時想到了這個。 確保要測試的是兩個數組;

$var1 = explode(' ',"a string to be turned to an array");
$var2 = ["test","a","string","array"];

獲取兩個數組的計數(或長度);

$var1count = count($var1);
$var2count = count($var2);

//用array_intersect()方法獲取兩個數組的交集

$intersect = array_intersect($var1,$var2);

//檢查相交的計數(或長度)是否與測試變量相同(例如$var1)

if(count($intersect)===$var1count)//it has all the words

僅供參考:區分大小寫。 您可能希望將全部轉換為小寫或大寫

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM