首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 多維數組過濾實戰:array_map + array_filter 處理二維/三維數組

     編輯:PHP 相關知識

PHP 多維數組過濾實戰

針對二維、三維數組的條件過濾,PHP 內建 array_map + array_filter 組合比嵌套 foreach 更聲明式。本文給出三種典型結構的處理代碼。

數據結構定義

// 二維數組
$arr  = [[1,3,5,7,9], [2,4,6,8,0]];

// 三維數組:鍵 'list' 包裹二維陣列
$arr2 = ['list' => [[1,3,5,7], [2,4,6,8], [3,2,9,0]]];

// 三維數組:頂層鍵為 'list'
$arr3 = ['list' => [[1,3,5,7], [2,4,6,8], [3,2,9,0]]];

1. 二維數組:移除值為 5 的元素

$res = array_map(function($row) {
    return array_filter($row, fn($v) => $v !== 5);
}, $arr);
// [[1,3,7,9], [2,4,6,8,0]]

2. 三維數組 $arr2:移除包含 6 的子數組

$res2 = array_map(function($subArr) {
    return array_filter($subArr, fn($v) => !in_array(6, $v));
}, $arr2['list']);
// [[1,3,5,7], [3,2,9,0]]  // 中間 [2,4,6,8] 被整個移除

3. 三維數組 $arr3:保持鍵名結構,使用 array_walk 寫入結果

$res3 = [];
array_walk($arr3, function($val, $key) use (&$res3) {
    $res3[$key] = array_filter($val, fn($v) => !in_array(6, $v));
});
// ['list' => [[1,3,5,7], [3,2,9,0]]]

關鍵差異對比

函數保留鍵名適用場景
array_map否(重建索引)純值轉換、扁平化處理
array_walk是(引用修改)需保持關聯鍵、就地修改
array_filter是(默認保留鍵)單層過濾

進階技巧

  • PHP 7.4+ 箭頭函數 fn($v) => ... 簡潔明瞭,自動捕獲外部變量。
  • 深度不固定的多維數組可編寫遞歸 deepFilter($arr, callable $fn)。
  • 大數據量時考慮生成器 yield 逐行處理,避免一次性載入記憶體。

善用高階函數能讓數組處理代碼更具可讀性與可組合性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved