PHP:具有相似匹配关键字的搜索数组

时间:2014-06-23 10:24:44

标签: php arrays multidimensional-array

我有一个类似

的数组
$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数组中完成吗?

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

你可以在php中使用stristr函数进行字符串操作,你不必考虑不同的情况并将它们转换为大写。

stristr 功能不区分大小写,因此您的代码会喜欢这个

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

答案 2 :(得分:0)

专注于你写的这一行 -

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

我们可以修改它来搜索子字符串,而不是完全匹配 -

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

这将尝试查找该值是否出现在$array[$key]

的内容中

希望有所帮助