2014-01-22 51 views

回答

1

使用array_intersect_key()

$searchParameters = array(
    'parameter1' => 'value1', 
    'parameter2' => 'value2', 
    'parameter3' => 'value3', 
); 
$allowedParamters = array('parameter1','parameter2'); 

$result = array_intersect_key($searchParameters, array_flip($allowedParamters)); 
+0

這會比使用上述解決方案重嗎?它必須遍歷每一個,並檢查密鑰,但另外還有array_flip。這是我見過的最神奇的方式! – StringsOnFire

+0

'array_intersect_key()'有內部優化,它不會使用循環。但就記憶而言,這會更重,是的。就時間而言 - 你必須檢查這一點。我的測試顯示''array_intersect()'[will win](http://3v4l.org/uqok4)(鏈接不會顯示執行時間,因爲沙盒阻止回調,但你可以從那裏粘貼代碼並檢查) –

+0

好的,對於較小的陣列來說,這可能更好,任何巨大的解決方案都可以節省內存。謝謝! – StringsOnFire

1
foreach($searchParameters as $key => $value) { 
    if(!array_key_exists($key, $allowedParamters)) { 
     unset($searchParameters[$key]; 
    } 
} 

這將刪除不允許的鍵及其值。

+1

這可能比array_intersect_key方法比較慢,但是我覺得對於大數組更好,因爲它避免了克隆它。謝謝! – StringsOnFire

0
foreach($searchParameters as $key=>$value){ 
    if(in_array($key,$allowedParamters)){ 
     $trueResult[$key] = $value; 
    } 
} 
print_r($trueResult); 
相關問題