检测包含 php 或 laravel 中所有空字符串 属性 值的对象

Detecting an object containing all empty string property values in php or laravel

我需要检测一个对象(如下图所示)的所有属性是否都有一个空字符串作为值。我怎样才能做到这一点?

object(stdClass)#1282 (9) {
["first_name"]=>
string(0) ""
["last_name"]=>
string(0) ""
["company"]=>
string(0) ""
["address_1"]=>
string(0) ""
["address_2"]=>
string(0) ""
["city"]=>
string(0) ""
["state"]=>
string(0) ""
["postcode"]=>
string(0) ""
["country"]=>
string(0) ""
}

如果所有属性都是空字符串,这应该 return true

return collect((array)$obj)->every(function ($value, $key) {
    return trim($value) === '';
    
});

如果您使用的是 PHP 7.4 及更高版本,这可能会更短。

return collect((array) $obj)->every(fn ($v) => '' === trim($v));

因为都是空字符串/null这些字段可以很容易地过滤掉:

(bool) array_filter((array) $object)

如果它有一个 属性 不是“虚假”值,您将得到 true.

仅供参考: 这也会过滤掉其他错误值,例如 0'0'false 等...

PHP.net Manual - Function Reference array_filter