过滤具有多个值的多级数组

时间:2016-11-29 17:00:45

标签: php arrays foreach

我正在尝试解决一个问题,即我有一个需要使用用户控制的过滤器进行过滤的多级数组。

数组示例

[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"  

我很确定这种方法实际上并不坏。真的坚持这个。

1 个答案:

答案 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;
    }
}