是否有任何PHP函数将剥离空对象的属性?
我正在返回从ORM中提取的对象数组的json_encode()。它包括许多具有空值的属性。删除这些空属性的最简洁方法是什么?我想我可以迭代属性,看看它们是否为空,然后取消set()该属性,但肯定有一种更优雅的方式吗?
我正在返回从ORM中提取的对象数组的json_encode()。它包括许多具有空值的属性。删除这些空属性的最简洁方法是什么?我想我可以迭代属性,看看它们是否为空,然后取消set()该属性,但肯定有一种更优雅的方式吗?
试试这个;它只适用于一个简单的对象,但如果它来自ORM,它应该足够简单。
// Strips any false-y values
$object = (object) array_filter((array) $object);
感谢戈登昨天回答了另一个问题,让我有了这个想法。
这的工作原理
请注意,这将删除所有具有空值的属性,包括空字符串,假布尔值和0,而不仅仅是空值;您可以更改array_filter调用,如果你想保留那些并且只保留那些完全为空的远程调用。
// Strips only null values
$object = (object) array_filter((array) $object, function ($val) {
return !is_null($val);
});
我将补充El Yobo给出的响应,因为只有当你有一个1维对象或数组时,这才有效。如果有任何数组或对象嵌套,那么为了让接受的解决方案正常工作,您必须创建某种递归数组过滤器。不好。
我和我的同事想出的最好的解决方案是在从服务器返回JSON字符串之前,对JSON字符串实际执行正则表达式。
$json = json_encode($complexObject);
echo preg_replace('/,\s*"[^"]+":null|"[^"]+":null,?/', '', $json);
正则表达式将删除表单字符串中的所有位置,包括前导逗号和键开头之间的任何空格。它还将匹配“key”:null,然后确保在 JSON 对象的开头未找到 null 值。,"key":null
这显然不是最理想的情况,但它将有效地删除空条目,而不必开发某种递归数组过滤器。