2016-11-29 2 views
0

사용자 제어 필터로 필터링해야하는 다중 레벨 배열이있는 문제를 해결하려고합니다. 어레이다중 값 배열 다중 값 필터

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

      ) 

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

예에서는, 필터는 예를 들면 언어 objectID에 일 것이다.

기준을 충족하지 않는 것은 제외해야합니다. 그것이 SQL 쿼리 일 경우에는 완벽하게 발견되지만 그렇지 않습니다. API는 제어 할 수없는 문자열을 반환하며 배열 형식입니다. 당신이 가진 것과 함께 일해야합니다.

if 문을 준비하는 함수를 작성하는 아이디어가 떠 올랐습니다. 내가 그 사실 않을 것 쉬운 방법이 확신

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

: 문제는이 경우

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

는 $ 쿼리는이 같은 동일한 것이 단지 그렇게하지 못할 것입니다 나쁜. 정말 이걸로 붙어.

+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를 하나 더 절약 할 수있는 훌륭한 솔루션입니다! –