2014-06-23 58 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; 
}