我想按搜索词过滤(搜索)多维数组。我不希望搜索项与键或值严格相同,而更像是不区分大小写的内容。
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)版本,我无法在客户端的主机上进行更改,所以我不能使用较新的方法。
谢谢您的建议。
假设您已将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
)
)