簡體   English   中英

PHP:具有相似匹配關鍵字的搜索數組

[英]PHP: search array with similar matching keywords

我有一個像

$arr = array(0 => array(id=>1,name=>"Apple"),
             1 => array(id=>2,name=>"Orange"),
             2 => array(id=>3,name=>"Grape")
);

我已經編寫了用於搜索多維數組的代碼。

就這個

function search($array, $key, $value)
{
    $results = array();
    search_r($array, $key, $value, $results);
    return $results;
}

function search_r($array, $key, $value, &$results)
{
    if (!is_array($array)) {
        return;
    }

    if (isset($array[$key]) && $array[$key] == $value) {
        $results[] = $array;
    }

    foreach ($array as $subarray) {
        search_r($subarray, $key, $value, $results);
    }
}

但它僅適用於完全匹配的關鍵字。 我需要的是,如果我在此數組中搜索“ Gra”。 該函數應返回

array(0 => array(id=>1,name=>"Grape")
);

這似乎類似於mysql%LIKE%條件。如何在PHP數組中完成此操作?

檢查字符串是否匹配時,可以改用strpos

strpos($strToCheck, 'Gra') !== false;//Will match if $strToCheck contains 'Gra'

strpos($strToCheck, 'Gra') === 0;    //Will match if $strToCheck starts with 'Gra'

請注意,以上內容區分大小寫。 對於不區分大小寫的情況,您可以在比較之前使用strripos strtoupper兩個字符串

在您的示例中,支票將變為:

if (isset($array[$key]) && strpos($array[$key],$value) !== false) {
    $results[] = $array;
}

您可以在PHP中使用stristr函數進行字符串操作,而不必考慮不同的情況並將其轉換為大寫形式。

stristr函數不區分大小寫 ,因此您的代碼將如下所示

 if (isset($array[$key]) && stristr($array[$key], $value) !== false) {
        $results[] = $array;
 }

專注於您在此處寫的那行-

if (isset($array[$key]) && $array[$key] == $value) {

我們可以對其進行修改以搜索子字符串,而不是完全匹配-

if (isset($array[$key]) && strpos($array[$key], $value)) {

這將嘗試查找該值是否存在於$array[$key]的內容中

希望能幫助到你

暫無
暫無

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

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