PHP:移除SOAP请求生成对象中的空项
清理SOAP生成对象中的空项
嘿,针对你这个由SOAP请求生成的多层嵌套对象空项清理需求,递归处理是最适合的方案——毕竟你的对象里既有嵌套对象,还有数组元素,一层一层手动处理太麻烦了。下面是具体的实现思路和代码:
核心思路
- 递归遍历所有层级:不管是对象的属性,还是数组的元素,都逐层深入处理
- 精准判断空值:移除空字符串、
null、空数组这类无效空项,但保留数值型的0这类有意义的值 - 处理后可还原结构:清理完成后可以选择把数组转回对象,保持原有的对象类型
代码实现
function removeEmptyItems($data) { // 先把对象转成数组,统一处理逻辑 if (is_object($data)) { $data = get_object_vars($data); } if (is_array($data)) { foreach ($data as $key => $value) { // 递归处理子元素,不管是嵌套对象还是数组 $data[$key] = removeEmptyItems($value); // 移除空值,但排除数值型的0 if (empty($data[$key]) && !is_numeric($data[$key])) { unset($data[$key]); } } // 如果处理后数组为空,返回null让上层继续清理 return empty($data) ? null : $data; } // 原始类型直接返回 return $data; } // 用你的AdminInfo对象调用函数 $cleanedAdminInfo = removeEmptyItems($yourAdminInfoObject); // 可选:把清理后的数组转回对象结构 $cleanedAdminInfoObject = (object)$cleanedAdminInfo;
针对你的场景的效果
运行这段代码后:
IDInfo数组里第一个空的IDInfo对象会被直接移除- 所有对象里的空属性(比如第一个
IDInfo的IDQualifierCode和IDNum)也会被清理掉 - 最终你会得到一个没有冗余空项的干净对象,完全保留有效数据
内容的提问来源于stack exchange,提问作者MB34
相关产品推荐
相关产品推荐

