不区分大小写按任何列中的值过滤二维数组[重复]

问题描述 投票: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”应返回第一个标题。

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

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 filtering case-insensitive
1个回答
1
投票

假设您已将 JSON 解码为数组,则可以使用此函数进行搜索。它会遍历数组的每个条目,使用

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
        )
)

3v4l.org 上的演示

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