PHP中移除包含空值或Null键值对的子数组实现方法咨询
当然可以实现这个需求!我给你两种实用的PHP实现方案,你可以根据自己的场景来选择:
实现方案
方法一:嵌套使用array_filter()(简洁高效)
这种方法利用PHP内置的数组过滤函数,代码简洁且性能不错:
// 你的示例数组 $originalArray = [ [ 'emp' => '', 'fun' => 1, 'data' => '', 'data_d' => '', 'desc' => '' ], [ 'emp' => 'teste', 'func' => 1, 'data' => '2021-08-30', 'data_d' => '2021-09-01', 'desc' => 'testetetetete' ], [ 'emp' => 'ersfewqef', 'func' => 2, 'data' => '2021-08-26', 'data_d' => '2021-08-28', 'desc' => 'dvgdgvqevgqe' ] ]; // 过滤数组:只保留所有值都非空的子数组 $filteredArray = array_filter($originalArray, function($subArray) { // 严格检查子数组中是否存在空字符串或null $hasEmptyValue = in_array(null, $subArray, true) || in_array('', $subArray, true); // 反向返回:没有空值的子数组才会被保留 return !$hasEmptyValue; }); // 可选:重置结果数组的索引为连续数字(如果需要的话) $filteredArray = array_values($filteredArray); print_r($filteredArray);
代码说明
- 外层
array_filter()负责遍历父数组的每个子数组,决定是否保留它; - 内层用
in_array(true)做严格类型检查,精准匹配空字符串''和null,避免把0、false这类有效值误判为空; - 最后用
array_values()重置索引,让结果数组的索引从0开始连续(如果不需要连续索引可以跳过这一步)。
方法二:foreach循环手动过滤(直观易扩展)
如果需要更灵活的判断逻辑(比如后续要增加其他过滤条件),手动循环的方式更直观:
$originalArray = [ // 你的示例数组内容同上 ]; $filteredArray = []; foreach ($originalArray as $subArray) { $isValid = true; // 遍历子数组的每个值,检查是否存在空值 foreach ($subArray as $value) { if ($value === '' || $value === null) { $isValid = false; break; // 一旦找到空值,直接跳出内层循环,提升效率 } } // 如果子数组没有空值,就加入结果数组 if ($isValid) { $filteredArray[] = $subArray; } } print_r($filteredArray);
代码说明
- 逐个遍历父数组的子数组,对每个子数组做空值检查;
- 只要发现一个空字符串或
null,就标记该子数组无效,不加入结果; - 这种方式的优势是后续修改判断逻辑(比如要排除
0或者false)时,直接修改内层的判断条件即可,非常灵活。
额外说明
如果你的业务场景中,“空值”还包括其他情况(比如0、false、'0'),可以把判断条件改成empty($value),但要注意empty()的行为:它会把0、'0'、false、null、''都视为“空”,所以使用前要确认是否符合你的需求。
内容的提问来源于stack exchange,提问作者BRABO
相关产品推荐
相关产品推荐

