PHP中多维数组的不区分大小写的模糊过滤

问题描述 投票:0回答:1

我想按搜索词过滤(搜索)多维数组。我不希望搜索项与键或值严格相同,而更像是不区分大小写的内容。

JSON中的数据如下所示:

[
    {"title":"The Call of the Wild","author":"Jack London"},
    {"title":"Great Expectations","author":"Charles Dickens"},
    {"title":"The Voyage of the Beatle","author":"Charles Darwin"}
]

我希望能够基于搜索返回结果数组。例如,对单词charles的搜索应拉出后两个标题,而对wild的搜索应返回第一个标题。

我一直在尝试修改以下内容和answers here,但似乎只是给我数组的索引。如何搜索数组中所有元素的标题和作者的值?

function searchArrayKeyVal($sKey, $search, $array) {
    foreach ($array as $key => $val) {
        if (strpos(strtolower($val[$sKey]), strtolower(trim($search))) !== false) {
            return $key;
        }
    }
         return false;
 }

仅供参考,有一个较旧的PHP(5.3)版本,我无法在客户端的主机上进行更改,所以我不能使用较新的方法。

谢谢您的建议。

php multidimensional-array filter
1个回答
1
投票

假设您已将JSON解码为数组,则可以使用此函数进行搜索。它遍历数组的每个条目,使用stripos在每个值中搜索搜索字符串,以执行不区分大小写的搜索。任何匹配的条目都将推送到stripos数组,该数组将在函数末尾返回:

$results

输出:

function searchArrayKeyVal($search, $array) {
    $results = array();
    // search for string in each column
    foreach ($array as $idx => $obj) {
        foreach ($obj as $key => $value) {
            if (stripos($value, $search) !== false) {
                array_push($results, $obj);
                break;
            }
        }
    }
    return $results;
}

print_r(searchArrayKeyVal('charles', $array));
print_r(searchArrayKeyVal('wild', $array));

Array ( [0] => Array ( [title] => Great Expectations [author] => Charles Dickens ) [1] => Array ( [title] => The Voyage of the Beatle [author] => Charles Darwin ) ) Array ( [0] => Array ( [title] => The Call of the Wild [author] => Jack London ) )

© www.soinside.com 2019 - 2024. All rights reserved.