在PHP 中,array_diff_assoc() 函數旨在查找兩個數組之間的差異,同時對鍵值進行優先排序對。然而,當使用此函數根據與另一個 2D 數組的交集來過濾 2D 數組中的行時,它可能不會總是產生預期的結果。
問題的出現是由於 array_diff_assoc() 執行的嚴格比較。它在比較過程中比較鍵值對的字串表示形式。這意味著即使兩個鍵值對包含相同的值,除非它們的字串表示形式相同,否則它們也不會被視為相等。
考慮以下範例資料:
<code class="php">$array1 = [ [12 => 'new q sets'], [11 => 'common set'] ]; $array2 = [ [11 => 'common set'] ];</code>
當我們嘗試使用array_diff_assoc() 根據$array2 中的行過濾$array1 時,我們得到不正確的輸出:
<code class="php">$output = array_diff_assoc($array1, $array2); print_r($output); // Output: [ // [11 => 'common set'] // ]</code>
This輸出顯示結果中存在公共行,而預期輸出應包含$array1 中的獨佔行。
如前所述,問題在於由 array_diff_assoc() 執行嚴格比較。比較以下兩個陣列時:
<code class="php">Array ( [0] => "Array" [1] => "Array" ) Array ( [0] => "Array" )</code>
函數傳回不同的鍵值對作為結果,因為鍵值對不是字串相同的。
為了解決這個問題,我們可以使用稍微不同的方法來檢查數組中是否存在特定的鍵值:
<code class="php">$filteredRows = array_filter($array1, function($row) use ($array2) { return !in_array($row, $array2); }); print_r($filteredRows); // Output: [ // [12 => 'new q sets'] // ]</code>
此方法使用in_array () 來檢查每行是否存在$array1 中的內容存在於$array2 中。如果 $array2 中不存在某行,則會將其包含在過濾結果中。
以上是如何在 PHP 中根據與另一個 2D 數組的交集從 2D 數組過濾行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!