我想通过搜索词过滤(搜索)多维数组。我不希望搜索词与键或值严格一致,而更像是不区分大小写的包含。
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),我无法在客户端主机上进行更改,因此我无法使用较新的方法。
假设您已将 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
)
)