Laravel集合(不是雄辩的)到对象

时间:2019-08-29 14:37:31

标签: laravel laravel-5.7

是否可以从Laravel集合中返回对象?

$originalArr =[
    'foo' =>'bar',
   'foo2' => 'bar2'

]

$coll=collect($originalArr)->reject(function($item){

    // do something
});


// now I can convert the collection to an array... but to an object?
$arr = $coll->toArray();

// array
dump($arr)

// but what if I want to have an object ?  I have to do 
$object  = (object) $arr;


dump ($object) 


//So you can access the attributes like  $object->foo.

但这似乎很愚蠢……首先创建一个集合,然后转换为数组,然后再次转换为对象。

有没有更有效的方法?

修改

好吧,我输入一个数组会得到一个数组,但是如果我输入一个对象怎么办?

$origalObject = (object) $originalArr =[
        'foo' =>'bar',
       'foo2' => 'bar2'

    ];

...并做同样的事情,laravel会给我一个数组。 而且我必须再次将其转换为对象。如果处理对象,那将是很多额外的代码。当然,我可以为此构建一个简单的函数,但是为什么不在Laravel中构建它?

1 个答案:

答案 0 :(得分:0)

toArray() method不是强制转换,实际上只是返回内部数组(在检查Arrayable元素之后)。

因此,即使集合具有toObject()方法,也将像在代码中一样简单地return (object)$this->toArray().

您可以创建一个推送请求并将其添加为一种便捷方法,但是您应该首先创建一个问题,看看是否有人对此感兴趣。

或者,对于像您的示例这样的简单情况,您可以只使用默认的PHP数组函数(例如array_filter),这样您就少了一步。