删除数组中所有「空值」元素:''、null、false、0、'0'、[],支持多维嵌套,可选是否 trim() 字符串。
<?php
/**
* 递归移除数组空值
* @param array $arr 引用传递,原地修改
* @param bool $trim 是否 trim 字符串后再判断空
*/
function arrayRemoveEmpty(array &$arr, bool $trim = true): void {
foreach ($arr as $key => &$value) {
if (is_array($value)) {
arrayRemoveEmpty($value, $trim);
if (empty($value)) unset($arr[$key]); // 递归后若为空数组则删除键
} else {
$val = $trim ? trim($value) : $value;
if ($val === '' || $val === null || $val === false) {
unset($arr[$key]);
} else {
$arr[$key] = $val; // 回写 trim 后的值
}
}
}
unset($value); // 打破引用
}
// 用法
$data = ['a' => ' ', 'b' => 0, 'c' => ['d' => '', 'e' => 'val']];
arrayRemoveEmpty($data);
print_r($data); // ['c' => ['e' => 'val']]
?>
&$value 配合 unset($value) 避免副作用empty() 会判定 0、'0' 为空,如需保留请自定义判断<?php $clean = fn(array $a) => array_filter($a, fn($v) => is_array($v) ? ($v = $clean($v)) !== [] : ($v = trim($v)) !== ''); ?>