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

PHP 多维数组递归清理空值:一行回调搞定

     編輯:PHP 綜合知識

需求

删除数组中所有「空值」元素:''、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 7.4+)

<?php
$clean = fn(array $a) => array_filter($a, fn($v) => is_array($v) ? ($v = $clean($v)) !== [] : ($v = trim($v)) !== '');
?>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved