一尘不染

任何将剥离对象属性为null的PHP函数吗?

json

我正在返回从ORM中提取的对象数组的json_encode()。它包含许多具有空值的属性。删除这些为空的属性的最巧妙方法是什么?我想我可以遍历这些属性,看看它们是否为空,然后对该属性进行unset(),但是肯定有一种更优雅的方法吗?


阅读 196

收藏
2020-07-27

共1个答案

一尘不染

试试这个; 它仅适用于简单对象,但如果它来自ORM,则应该足够简单。

// Strips any false-y values
$object = (object) array_filter((array) $object);

感谢Gordon昨天对另一个问题的回答,给了我这个主意。

这是由

  • 将对象转换为关联数组,其中对象属性是键,其值是数组值
  • 使用带有默认参数的array_filter来删除具有错误(例如,空或null)值的数组条目
  • 将新数组转换回简单对象

请注意,这将删除所有具有空值的属性,包括空字符串,错误的布尔值和0,而不仅仅是空值。您可以更改array_filter调用,如果您想保留那些并且仅远程那些完全为空的。

// Strips only null values
$object = (object) array_filter((array) $object, function ($val) {
    return !is_null($val);
});
2020-07-27