2017-10-13 33 views
1

我有兩個數組,一個是自定義的。只有在數組A中沒有找到數組時,才返回數組鍵A

$fields = array("first_name" => "test", "last_name" => "Test", "phone" =>"111-111-1111, "id" => 1234"); 

另一個是從csv文件的第一行抓取的。這將返回象這樣

$headers = array ("fname" => "test", "last_name" => "Test", "phone"=> "123-123-1234"); 

我再想,如果在$頭陣列中的密鑰不匹配任何在$領域數組鍵返回一個錯誤的數組。它可以,如果$ fields數組中的鍵不全都出現在$ headers數組中。

例如,上面的兩個數組應該返回一個錯誤,因爲密鑰fname不存在於$ fields數組中,但不是因爲$ headers數組中缺少id。

我試着用多循環if語句試驗,但我正在尋找更好的方式,我認爲我可以操縱array_diff方法但沒有運氣。

$dif_keys = array_diff($fields, $headers); 
+2

如果您只關心密鑰,則需要改爲'array_diff_key()'。 – jeroen

+0

_I然後想要返回一個錯誤,如果$ headers數組中的鍵不匹配$ fields array._中的任何鍵,但是'phone'和'last_name'在兩個匹配的條件中,則需要解釋條件更好。 – AbraCadaver

+0

@AbraCadaver然後我想返回一個錯誤,如果$ headers中有一個鍵,數組不匹配$ fields數組中的任何鍵。我更新了問題,以便更清楚 –

回答

3

兩件事情:

  1. 如果你想檢查是否所有$headers存在於$fields,使用array_diff_key代替array_diffarray_diff只會比較值。

  2. 更改參數的順序。 diff函數返回第一個參數的值,這些值不會出現在隨後的參數中,所以如果$fields的某些鍵不在$headers之內並不重要,那麼您首先需要輸入$headers

所以我認爲你需要的代碼是:

$diff = array_diff_key($headers, $fields); 

您可以評估$diff作爲一個布爾值。 (例如if ($diff) {...)如果它是空的,它將評估爲false,這意味着$headers中的所有密鑰在$fields中都有對應的密鑰。

+0

啊,我看到我很近。不是真的,但有正確的想法,有一個現有的功能,可以照顧它。 –

+0

我通過thunk :-( – AbraCadaver

+0

如果$字段中的鍵具有一個鍵的一部分,例如。$頭將有「ship_state」和$字段將有「狀態」我堅持使用循環與if語句?我不希望該實例返回錯誤或差異。 –

2

檢查交叉鍵的數量和與$headers計數比較:

if(count(array_intersect_key($headers, $fields)) == count($headers)) { 
    echo 'Good'; 
} else { 
    echo 'Bad'; 
} 

因此,這將返回所有鍵在$header存在於$fields和比較計數,這應該是相同的。

相關問題