在PHP中,有時候我們需要從一個二維陣列中刪除幾個陣列。這個需求相對來說比較常見,例如我們需要忽略一些特定的數據,或是把某些不符合要求的數據從原始數據集中過濾出來。本文將介紹如何利用PHP內建函數和自訂函數來刪除二維陣列中的一些陣列。
一、PHP內建函數array_filter()刪除二維陣列中的幾個陣列
PHP內建函數array_filter()可以過濾掉一個陣列中的某些元素,傳回一個新的數組。在刪除二維數組中的幾個數組時,我們可以藉助此函數來實現。下面是一個例子:
$array = [ ['id' => 1, 'name' => 'Alice', 'gender' => 'female'], ['id' => 2, 'name' => 'Bob', 'gender' => 'male'], ['id' => 3, 'name' => 'Charlie', 'gender' => 'male'], ['id' => 4, 'name' => 'David', 'gender' => 'male'] ]; $exclude_ids = [2, 3]; $new_array = array_filter($array, function($item) use ($exclude_ids) { return !in_array($item['id'], $exclude_ids); }); print_r($new_array);
這個範例中,我們有一個包含4個子數組的二維數組$array,我們想要從中刪除id為2和3的子數組。我們定義了$exclude_ids數組來包含需要刪除的id值。然後我們使用array_filter()函數,並將其傳遞給一個閉包函數。這個函數檢查子數組中的'id'值是否在$exclude_ids數組中,如果在就回傳false,否則回傳true。此外,我們也使用了use語句,使得閉包函數能夠存取$exclude_ids數組。最終,我們得到了一個新的數組,僅包含'id'值不為2和3的子數組。
二、自訂函數刪除二維數組中的幾個數組
除了使用內建函數外,我們也可以寫自己的函數來刪除二維數組中的幾個數組。這樣可以更靈活地控制刪除的方式和條件。下面是一個例子:
function exclude_subarrays($array, $condition) { $new_array = []; foreach($array as $key => $subarray) { $should_exclude = true; foreach($condition as $k => $v) { if($subarray[$k] !== $v) { $should_exclude = false; break; } } if(!$should_exclude) { $new_array[] = $subarray; } } return $new_array; } $array = [ ['id' => 1, 'name' => 'Alice', 'gender' => 'female'], ['id' => 2, 'name' => 'Bob', 'gender' => 'male'], ['id' => 3, 'name' => 'Charlie', 'gender' => 'male'], ['id' => 4, 'name' => 'David', 'gender' => 'male'] ]; $exclude_condition = ['id' => 2, 'gender' => 'male']; $new_array = exclude_subarrays($array, $exclude_condition); print_r($new_array);
這個範例中,我們同樣有一個包含4個子數組的二維數組$array,需要刪除id為2且gender為male的子數組。我們寫了一個名為exclude_subarrays的函數來完成這個任務,這個函數接受兩個參數:原始數組$array和一個包含刪除條件的關聯數組$condition。在函數內部,我們建立了一個空的新陣列$new_array,然後使用foreach遍歷原始數組中的所有子數組。對於每個子數組,我們都定義了一個$should_exclude標誌,在初始化時設為true。我們又使用了一個foreach遍歷刪除條件$condition中的每個鍵值對。對於每個鍵值對,我們都檢查目前子數組中對應的鍵是否等於要求的值。如果等於,表示應該刪除這個子數組,於是將$should_exclude標誌設為false,並跳出迴圈。否則,繼續檢查下一個鍵值對。在完成整個$condition數組的檢查後,如果$should_exclude仍然為true,表示當前的子數組不需要被刪除,於是將它加入$new_array數組中。最後,將新數組傳回即可。
總結
以上就是兩種方式來刪除二維陣列中的幾個陣列。雖然內建函數array_filter()的寫法較短,但自訂函數比較靈活,在某些場合會更適用。在使用過程中,應根據實際情況靈活選擇。
以上是php怎麼刪除二維數組中的幾個子數組的詳細內容。更多資訊請關注PHP中文網其他相關文章!