使用二維數組時,根據特定條件過濾行變得至關重要。本文解決了一個常見的挑戰:透過一個數組中的行過濾另一個數組中的行,同時排除常見行。
問題:
嘗試使用 array_diff_assoc( )來實現此過濾返回公共行而不是預期的唯一行。
<code class="php">$array1 = [ [12 => 'new q sets'], [11 => 'common set'] ]; $array2 = [ [11 => 'common set'] ];</code>
呼叫array_diff_assoc($array1, $array2) 後,輸出仍然包含公共行:
<code class="php">[ [11 => 'common set'] ]</code>
解決方案:
解決方案:<code class="php">$json_array1 = array_map('json_encode', $array1); $json_array2 = array_map('json_encode', $array2); $filtered_rows = array_diff_assoc($json_array1, $json_array2); $filtered_rows = array_map('json_decode', $filtered_rows);</code>問題的根本原因在於array_diff_assoc() 所使用的比較機制。它採用嚴格比較,這意味著值的字串表示形式必須精確匹配。在給定的範例中,兩個陣列中與鍵 11 關聯的值都是「common set」。但是,array_diff_assoc() 將它們視為不同的值,因為它們儲存在不同的陣列中。 為了獲得所需的過濾行為,我們需要使用考慮到數組中儲存的實際值的比較。實現此目的的一種方法是在比較之前將所有陣列元素轉換為通用類型。以下是使用 json_encode() 的範例:
<code class="php">[ [12 => 'new q sets'] ]</code>此方法將每個陣列元素轉換為 JSON 字串,並確保現在基於實際值進行比較。過濾操作將正確識別並僅傳回唯一行:
以上是如何透過另一個數組行過濾 2D 數組行,同時排除公共行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!