實務開發常需清理多維陣列中的空值,或將三維陣列扁平化為二維。本文提供 array_map/array_filter/array_walk 組合拳與 foreach 兩種風格的完整代碼。
<?php
// 二維陣列
$arr = [[,,,,], [,,,,]];
// 三維陣列(帶鍵名)
$arr = [
'list' => [[,,,], [,,,], [,,,]]
];
// 方法 1:array_map + array_filter(函數式風格)
$res = array_map(function($arr) {
return array_filter($arr, function($v) {
return $v !== '';
});
}, $arr);
// 方法 2:過濾特定值(如空字串、null)
$res = array_map(function($val) {
return array_filter($val, function($v) {
return !in_array('', $v);
});
}, $arr);
// 方法 3:array_walk 保留鍵名
$res = [];
array_walk($arr, function($val, $key) use(&$res) {
$res[$key] = array_filter($val, function($v) {
return !in_array('', $v);
});
});
var_dump($res);
<?php
$result = [
0 => [0 => ['bid'=>41, 'brealname'=>'we教官', 'cid'=>41, 'crealname'=>'we教官']],
1 => [0 => ['bid'=>6, 'brealname'=>'虎子', 'cid'=>19, 'crealname'=>'張魚']]
];
print_r($result); // 原始結構
// 方法 1:foreach 直接取第一層元素
foreach ($result as $key => $v) {
$new_arr[] = $v[0];
}
print_r($new_arr);
// 方法 2:雙層 foreach 扁平化
$arr2 = [];
foreach ($result as $value) {
foreach ($value as $v) {
$arr2[] = $v;
}
}
unset($result, $value, $v);
print_r($arr2);
| 函數 | 特點 | 適用場景 |
|---|---|---|
| array_map | 保留索引結構,回傳新陣列 | 統一轉換每個子陣列 |
| array_filter | 移除符合條件元素,重置數字索引 | 清理空值/特定值 |
| array_walk | 可修改原陣列/保留鍵名,需引用參數 | 需保留關聯鍵名 |
| foreach | 直觀可控,效能最佳 | 複雜邏輯、多層嵌套 |
array_filter 匿名函數array_walk + use(&$res)foreach,可讀性與效能兼備掌握這些組合招,多維陣列清洗轉換不再是難題。