PHP/Laravel中如何检测多维数组的所有值是否为空?
判断多维数组所有最内层值是否为空的简便方法
嘿,这个场景我太熟悉了!要快速判断嵌套数组里所有最内层的值是不是全为空,完全不用手动写递归遍历,PHP里有两个很实用的办法可以轻松搞定:
方法一:用array_walk_recursive跟踪非空值
这个函数会自动递归遍历到数组的每一个最内层元素,我们只需要设置一个标志变量,遇到非空值就把它置为false:
$allValuesEmpty = true; // 遍历所有嵌套元素 array_walk_recursive($yourSubmittedArray, function($value) use (&$allValuesEmpty) { // 这里用trim是为了排除纯空格的情况,不需要的话可以直接用!empty($value) if (!empty(trim($value))) { $allValuesEmpty = false; } }); // 结果判断 if ($allValuesEmpty) { echo "所有值都是空的!"; } else { echo "存在非空值!"; }
这个方法的优势是不用自己处理递归逻辑,PHP会帮我们搞定嵌套遍历。虽然它不会提前终止遍历,但对于表单提交的数组来说,性能完全不是问题。
方法二:先扁平化数组再过滤
把多维数组转成一维数组后,就可以用我们熟悉的array_filter来处理了,借助迭代器能快速实现扁平化:
// 把多维数组转成一维数组 $flatArray = iterator_to_array( new RecursiveIteratorIterator( new RecursiveArrayIterator($yourSubmittedArray) ) ); // 过滤掉所有空值(同样支持trim处理空格) $nonEmptyValues = array_filter($flatArray, function($value) { return !empty(trim($value)); }); // 如果过滤后数组为空,说明原数组所有值都是空的 $allValuesEmpty = empty($nonEmptyValues);
这个方法思路更直观:把嵌套结构拆平,然后检查过滤后是否还剩非空元素,新手也能快速理解。
小提示
如果你的业务里把纯空格字符串也算作“空”,一定要加上trim(),不然' '会被empty()判定为非空;如果只需要判断严格的null或者空字符串'',直接用!empty($value)就行。
内容的提问来源于stack exchange,提问作者Abed Rawas
相关产品推荐
相关产品推荐

