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'

请注意,以上内容区分大小写。对于不区分大小写的情况,在比较之前,可以strtoupper两个字符串都使用strripos

在您的示例中,检查将变为:

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] 内容中是否存在该值

希望它能帮助