2014-06-23 57 views
0

我有一個像PHP:與同類匹配關鍵字的搜索排列

$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%condition.How可以在這個PHP數組做什麼?

回答

2

當檢查是否匹配字符串,您可以改用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; 
} 
+0

感謝Jim..that工作:) –

0

集中於行這裏,你寫的 -

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

我們可以修改它來搜索串,而不是精確匹配 -

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

這將嘗試查找該值是否存在於內容中的某處

希望它可以幫助

1

可以在PHP中使用stristr函數的字符串操作,你就不必考慮不同的情況下,並將他們爲大寫。

stristr功能不區分大小寫,所以你的代碼會喜歡這個

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