2016-11-29 45 views
0

我正试图解决一个问题,那就是需要使用用户控制的过滤器来过滤多级数组。阵列使用多重值过滤多级别数组

[1] => Array 
    (
     [objectID] => 5038 
     [Data] => Array 
      (
       [originalId] => 6 

      ) 

     [titles] => InfoType Object 
      (
       [_] => string 
       [language] => eng 
      ) 
) 

示例过滤器将是语言然后和的objectID,例如。

任何不符合标准的东西都必须排除。听起来很完美,如果这将是一个SQL查询,但事实并非如此。该API返回一个不能被控制的字符串,并且它是一个数组形式。必须与你拥有的东西一起工作。

想法来写一个函数,准备一个if语句。问题是,你不能做到这一点

foreach ($cache as $listing) { 
     foreach ($filters as $filter_param => $filter_value) { 
      if ($query) $output[] = $listing; 
     } 
    } 

在这种情况下,$查询就等于这样的:

$listing["titles"]["language"] =="eng" && $listing["objectID"] =="5038" 

我敢肯定有一个更简单的方式,不会真的坏。真的坚持这一个。

+0

筛选器来自表单。无论哪种方法都适合你。所以几乎GET/POST。 –

+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; 
    } 
} 
+0

那就是!这是一个很好的解决方案,可以为我节省一个额外的foreach! –