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