首頁 > 後端開發 > php教程 > 如何在 PHP 中根據與另一個 2D 數組的交集從 2D 數組過濾行?

如何在 PHP 中根據與另一個 2D 數組的交集從 2D 數組過濾行?

Linda Hamilton
發布: 2024-10-26 06:24:30
原創
690 人瀏覽過

How to Filter Rows from a 2D Array Based on Intersection with Another 2D Array in PHP?

基於行交集過濾二維數組的行

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板