2013-04-02 31 views
0

我有一個窗體,除了用戶輸入來過濾搜索結果外,還需要一個窗體。我不是這個表格的原創設計師。我看到過濾結果的兩種方法之一。 A)我可能試圖限制SQL查詢選定的代碼或B)過濾返回的結果。我想B.通過在其中有管道的鍵值過濾數組

我已經試過

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

沒有成功:

數組1看起來是這樣的:

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) 

我想通了管道如何得到到關鍵的價值觀,我試圖調整我的鑰匙匹配,但也沒有工作。

關於如何使用不是單個值且動態更改的鍵過濾這些類型結果的任何建議?

ARRAY2樣子:

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) 

我所做的鍵值,並試圖設置一些類型的過濾字符串值相同。 但是由於array1中的第三個值將在while子句中動態傳遞。我無法將該數字與Array2匹配。

我的預期結果是

array (

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

       'provider_id' => 127654) 
     ) 

作爲只的6個輸入一個相匹配的數組1值之一。

回答

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));