2017-07-09 109 views
0

我需要檢查一組查詢參數中是否存在一組查詢參數。例如,我要檢查,如果array('option' => 'com_pages', 'view' => 'page'),存在內:檢查數組中是否存在鍵/值對

Array 
(
    [option] => com_pages 
    [format] => html 
    [view] => page 
) 

Array 
(
    [option] => com_archive 
) 

我試圖找到一個PHP函數,將提供這種搜索,但發現便無法任何匹配我正在尋找的東西。所以,我創建了以下功能:

function checkRoute($params, $request) { 
    foreach($params as $key => $value) { 
     if(!array_key_exists($key, $request)) { 
      return false; 
     } 

     if($request[$key] != $value) { 
      return false; 
     } 
    } 

    return true; 
} 

哪裏$request是當前請求的查詢參數的數組。

有沒有更快的方法來做到這一點與我失蹤的數組函數?

+0

你希望它在您的兩個例子返回true?你希望它也能在空數組上返回true? – EarthDragon

+1

'isset($ request [$ key])''會比'array_key_exists()'快,或者至少在幾年前......大聲笑......語義上我會梳理if if,if (!isset($ request [$ key])|| $ request [$ key]!== $ value)'',如果您關心這些邊緣情況,則使用'false'和'0'的嚴格類型... – ArtisticPhoenix

+0

你也應該檢查[array_intersect](http://php.net/manual/en/function.array-intersect.php)它給你你的陣列的交集 – EarthDragon

回答

2

你可以使用一個arrey_intersect_assoc兩個陣列和檢查結果的計數等於預期的匹配數量..

if (count(array_intersect_assoc($a, $b)) == count($a)){ 
    // then match .. 

} 
+0

.. .. == count($ a)好得多..謝謝.. @ NicholasJohn16 – scaisEdge

+0

正如@ArtisticPhoenix建議的,您應該使用'array_intersect_assoc'來比較密鑰 – EarthDragon

+0

@EarthDragon ..正確答案已更新 – scaisEdge