我正在尝试解决一个问题,即我有一个需要使用用户控制的过滤器进行过滤的多级数组。
数组示例
[1] => Array
(
[objectID] => 5038
[Data] => Array
(
[originalId] => 6
)
[titles] => InfoType Object
(
[_] => string
[language] => eng
)
)
例如,过滤器将是language和objectID。
任何不符合标准的内容都必须排除在外。听起来很完美,如果那是一个SQL查询,但事实并非如此。 API返回一个无法控制的字符串,它是一个数组形式。必须使用你拥有的东西。
这个想法出现了编写一个准备if语句的函数。问题是你不能那样做
foreach ($cache as $listing) {
foreach ($filters as $filter_param => $filter_value) {
if ($query) $output[] = $listing;
}
}
在这种情况下,$ query将等于:
$listing["titles"]["language"] =="eng" && $listing["objectID"] =="5038"
我很确定这种方法实际上并不坏。真的坚持这个。
答案 0 :(得分:0)
function isGood($what, $filters) {
foreach ($filters as $key => $value) {
if (is_array($value)) {
if (isGood($what[$key], $value) === false) {
return false;
}
} else {
if ($what[$key] != $value) {
return false;
}
}
}
return true;
}
foreach($cache as $listing) {
if (isGood($listing, $filters)) {
$output[] = $listing;
}
}