首頁 >後端開發 >PHP問題 >php怎麼剔除二維數組中的某子數組

php怎麼剔除二維數組中的某子數組

PHPz
PHPz原創
2023-04-20 13:51:46722瀏覽

在 PHP 開發過程中,陣列是一個極為重要的資料類型,它可以方便地儲存和表示大量資料。有時候,我們需要從一個二維數組中剔除某些數組,這時我們該怎麼做呢?本文將介紹兩種不同的方法來達到這個目的。

方法一:使用 array_filter 函數

array_filter 函數是 PHP 中的內建函數,用來過濾陣列中的元素。我們可以利用函數,實現從一個二維數組中剔除某些數組的效果。具體實作如下:

function removeArray($arr, $remove)
{
    return array_filter($arr, function ($item) use ($remove) {
        return !in_array($item, $remove);
    });
}

在上述程式碼中,我們定義了一個名為removeArray 的函數,這個函數接受兩個參數:

  • $arr:表示需要從中剔除數組的二維數組。
  • $remove:表示需要被剔除的陣列集合。

接著,我們使用 array_filter 函數對 $arr 陣列進行篩選。在回呼函數中,我們使用 in_array 函數來判斷目前遍歷的陣列是否需要被剔除。如果需要剔除,則傳回 false,否則傳回 true。最終,過濾後的陣列就是我們需要的結果。

使用案例:

$data = [
    ['name' => 'Tom', 'age' => 20],
    ['name' => 'Jerry', 'age' => 18],
    ['name' => 'Andy', 'age' => 22],
    ['name' => 'John', 'age' => 25]
];

$remove = [
    ['name' => 'Tom', 'age' => 20],
    ['name' => 'John', 'age' => 25]
];

$result = removeArray($data, $remove);

print_r($result);

輸出結果:

Array
(
    [1] => Array
        (
            [name] => Jerry
            [age] => 18
        )

    [2] => Array
        (
            [name] => Andy
            [age] => 22
        )

)

方法二:使用 array_udiff 函數

另一個方法是使用 array_udiff 函數。此函數用於計算數組的差集,其可以自訂一個回呼函數進行數組的比較,從而實現所需的功能。

具體實作如下:

function removeArray($arr, $remove)
{
    return array_udiff($arr, $remove, function ($a, $b) {
        return ($a == $b) ? 0 : 1;
    });
}

在上述程式碼中,我們與方法一相似,定義了一個名為 removeArray 的函數。函數接受兩個參數 $arr 和 $remove 分別表示需要從中剔除陣列的陣列集合和需要被剔除的陣列集合。

我們使用 array_udiff 函數對 $arr 陣列和 $remove 陣列進行比較,執行自訂函數,比較陣列中的元素並傳回結果。

使用案例:

$data = [
    ['name' => 'Tom', 'age' => 20],
    ['name' => 'Jerry', 'age' => 18],
    ['name' => 'Andy', 'age' => 22],
    ['name' => 'John', 'age' => 25]
];

$remove = [
    ['name' => 'Tom', 'age' => 20],
    ['name' => 'John', 'age' => 25]
];

$result = removeArray($data, $remove);

print_r($result);

輸出結果:

Array
(
    [1] => Array
        (
            [name] => Jerry
            [age] => 18
        )

    [2] => Array
        (
            [name] => Andy
            [age] => 22
        )

)

綜上所述,從一個二維陣列中剔除某些陣列的實作方法有兩種,分別是使用array_filter 函數和array_udiff 函數。二者都是常用的方法,具體使用哪一種取決於自身需求。

要注意的是,如果數組中存在相同的子數組,方法一(array_filter)不能很好地工作,因為 PHP 中無法直接比較數組,需要使用 array_diff_assoc 函數。

以上是php怎麼剔除二維數組中的某子數組的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn