2013-04-02 5 views
0

검색 결과를 필터링하기 위해 사용자로부터 입력을 제외해야하는 양식이 있습니다. 나는 형식의 원래 디자이너가 아니다. 결과를 필터링하는 두 가지 방법 중 하나를 보았습니다. A) SQL 쿼리를 선택된 코드로 제한하려고 시도하거나 B) 반환 된 결과를 필터링 할 수있었습니다. 나는 파이프가있는 키 값으로 배열 필터링

var_dump(array_intersect_key($array1, $array2)); 

을 시도 B.

을 시도하고 어떤 성공하지 :

하는 array1은 다음과 같습니다

array (

     '|00006|5' => array('pid' => 111 

       'provider_id' => 123456) 

     '|93000|34' => array('pid' => 112 

       'provider_id' => 127654) 

     '|93225|1' => array('pid' => 113 

       'provider_id' => 127893) 

)를 파이프가있어 내가 어떻게 알아 냈

키 값에 입력하고 일치하도록 키를 조정하려고했으나 작동하지 않았습니다.

단일 값이 아니며 동적으로 변경되는 키를 사용하여 이러한 유형의 결과를 필터링하는 방법에 대한 제안 사항은 무엇입니까?

99232 => string '99232' (length=5) 
    85610 => string '85610' (length=5) 
    93970 => string '93970' (length=5) 
    93000 => string '93000' (length=5) 
    99406 => string '99406' (length=5) 
    99215 => string '99215' (length=5) 

내가 키 값 및 설정에 필터링의 몇 가지 유형을 시도하는 문자열 값을 동일하게 : 같은

배열 2는 본다. 그러나 array1의 세 번째 값은 while 절에서 동적으로 전달됩니다. 그 번호를 Array2와 일치시킬 방법이 없습니다.

내 예상 결과는 6 개 개의 입력 중 하나가 배열 1의 값 중 하나와 일치하는 것으로 만

array (

     '|93000|34' => array('pid' => 112 

       'provider_id' => 127654) 
     ) 

이다.

답변

1

당신은 array_intersect_ukey()를 사용하여 다음 키 비교 함수를 정의하고 있습니다

$a = array (
     '|00006|5' => array('pid' => 111, 
       'provider_id' => 123456), 
     '|93000|34' => array('pid' => 112, 
       'provider_id' => 127654), 
     '|93225|1' => array('pid' => 113, 
       'provider_id' => 127893), 
); 

$b = array('93000' => '93000'); 

print_r(array_intersect_ukey($a, $b, function($ka, $kb) { 
     if ($ka[0] == '|') {      // transform key 
       $ka = substr($ka, 1, strrpos($ka, '|') - 1); 
     } 
     if ($kb[0] == '|') {      // transform key 
       $kb = substr($kb, 1, strrpos($kb, '|') - 1); 
     } 
     // perform regular comparison 
     return strcmp($ka, $kb); 
})); 
+0

고마워요! 방금 코드를 실행했는데 잘 작동합니다. – user1846439

+0

print_r을 작업 변수로 대체하려고 시도했지만 그렇게 할 수 없었습니다. 나는 그것을 $ frows = array_intersect_ukey()로 대체하려고 시도했다. 그리고 strcmp를 울리려고했습니다. 이것을 작업 변수에로드하려면 무엇을 사용해야합니까? – user1846439

+0

@ user1846439 당신이 가지고있는 문제를 시연하기 위해 지금 가지고있는 것을 코드 패드에 쓸 수 있습니까? –

1

또는 당신은이 작업을 수행 할 수 있습니다. 행운을 빌어 요.

$parsed1 = array(); 
foreach($array1 as $key => $value) { 
    $splited = explode("|", $key); 
    $parsed1[$splited[1]] = $value; 
} 
var_dump(array_intersect_key($parsed1,$array2)); 
관련 문제