二維陣列過濾空值
$arr = [
['a', '', 'b', null],
['', 'c', '', 'd']
];
// 方法一:array_map + array_filter
$res = array_map(function($row) {
return array_filter($row, function($v) {
return $v !== '';
});
}, $res);
// 方法二:array_walk(需引用結果陣列)
$res = [];
array_walk($arr, function($row, $key) use (&$res) {
$res[$key] = array_filter($row, function($v) {
return !in_array('', $v);
});
});
三維陣列轉二維陣列
$data = [
0 => [0 => ['bid' => 41, 'name' => '教官']],
1 => [0 => ['bid' => 6, 'name' => '虎子']]
];
// 方法一:foreach 簡單明瞭
$new = [];
foreach ($data as $item) {
$new[] = $item[0];
}
// 方法二:雙重 foreach
$new = [];
foreach ($data as $group) {
foreach ($group as $item) {
$new[] = $item;
}
}
進階過濾:移除特定值
$filtered = array_map(function($row) {
return array_filter($row, function($v) {
return !in_array($v, ['', null, false], true);
});
}, $data);
函數式風格封裝
function filter_multi_array(array $array, callable $callback) {
return array_map(function($item) use ($callback) {
return is_array($item) ? filter_multi_array($item, $callback) : $callback($item);
}, $array);
}