PHP多维数组删除null/空字符串值保留0值的实现问题
问题原因
你的原有代码存在两个问题导致无法达到预期效果:
- 递归调用处理子数组时,没有将处理后的子数组赋值回原数组,子数组的修改不会同步到上层数组
- 未判断子数组处理后是否为空,全为null的空数组(如示例中的subscription)也需要删除
修正后的代码
private function arrayUnset( $dataPayment ) { foreach( $dataPayment as $key => $value ) { if( is_array( $value ) ) { // 递归处理后将结果回写到原数组 $processedSubArray = $this->arrayUnset( $value ); if (empty($processedSubArray)) { // 子数组处理后为空直接删除 unset($dataPayment[$key]); } else { $dataPayment[$key] = $processedSubArray; } // 子数组处理完就跳过后续的null判断,避免误删有效子数组 continue; } if( $value === null || $value === "" ) { unset( $dataPayment[ $key ] ); } } return $dataPayment; }
逻辑说明
- 递归处理子数组后,将处理结果回写到父数组对应的键位,确保子数组的修改生效
- 新增子数组空值判断:如果子数组处理完所有null和空字符串后为空,直接删除该子数组键
- 对数组类型的值跳过后续的null判断,避免把非空的子数组误判为无效值删除
- 保留值为0、false等合法的非null、非空字符串值
内容的提问来源于stack exchange,提问作者Rafa1285
相关产品推荐
相关产品推荐

