在PHP 中,array_diff_assoc() 函數旨在找出兩個數組之間的差異,同時對鍵值進行優先排序對。然而,當使用此函數根據與另一個 2D 數組的交集來過濾 2D 數組中的行時,它可能不會總是產生預期的結果。
問題的出現是由於由 array_diff_assoc() 執行的嚴格比較。它在比較過程中比較鍵值對的字串表示形式。這意味著即使兩個鍵值對包含相同的值,除非它們的字串表示形式相同,否則它們也不會被視為相等。
考慮以下範例資料:
$array1 = [
[12 => 'new q sets'],
[11 => 'common set']
];
$array2 = [
[11 => 'common set']
];
當我們嘗試使用array_diff_assoc() 根據$array2 中的行過濾$array1 時,我們得到不正確的輸出:
$output = array_diff_assoc($array1, $array2);
print_r($output);
// Output: [
// [11 => 'common set']
// ]
此輸出顯示結果中存在公用行,而預期輸出應包含 $array1 中的獨佔行。
如前面所提到的,問題在於 array_diff_assoc() 執行的嚴格比較。比較以下兩個陣列時:
Array ( [0] => "Array" [1] => "Array" )
Array ( [0] => "Array" )
此函數傳回不同的鍵值對作為結果,因為鍵值對不是字串相同的。
為了解決這個問題,我們可以使用稍微不同的方法來檢查數組中是否存在特定的鍵值:
$filteredRows = array_filter($array1, function($row) use ($array2) {
return !in_array($row, $array2);
});
print_r($filteredRows);
// Output: [
// [12 => 'new q sets']
// ]
此方法使用 in_array() 來檢查 $array1 中的每一行是否存在於 $array2 中。如果 $array2 中不存在某行,則該行將包含在過濾結果中。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3