在 Laravel 中将数组转换为集合
Posted
技术标签:
【中文标题】在 Laravel 中将数组转换为集合【英文标题】:Convert Array To Collection in Laravel 【发布时间】:2018-08-11 12:27:16 【问题描述】:我在 php 中有以下数组:
[
"website": "example",
"url": "example.com"
,
"website": "example",
"url": "example.com"
]
现在我想将其转换为一个集合,因此我按 website
或 url
键排序。但是,当我这样做时:
$myArray = collect(websites);
我得到了这个:
"0":
"website": "example",
"url": "example.com"
,
"1":
"website": "example",
"url": "example.com"
排序不起作用,我想知道我做错了什么以及如何解决它,所以我有一个可以轻松排序的对象数组集合。
编辑: 我希望输出与此相同:
[
"website": "example",
"url": "example.com"
,
"website": "example",
"url": "example.com"
]
“排序不起作用”是指项目未排序。
【问题讨论】:
你期望输出是什么 “排序不起作用”是什么意思? 我贴在上面的,没想到和原来有变化 您的问题在当前形式下毫无意义 但它并没有改变。你的普通数组也有索引。 【参考方案1】:编辑;我知道这个问题根据标题得到了很多点击,所以这些人的 TLDR 是使用 collect()
帮助器来创建一个 Collection 实例。回答提问者的简介:
如果你有
$collection = collect([
(object) [
'website' => 'twitter',
'url' => 'twitter.com'
],
(object) [
'website' => 'google',
'url' => 'google.com'
]
]);
然后,您将数组包装在 Collection 类的实例中。
这意味着它的行为不像一个典型的数组(-它会像数组一样,但不要像对待它一样对待它),直到您调用 all()
或 toArray()
。要删除任何添加的索引,您需要使用 values()
。
$sorted = $collection->sortBy('website');
$sorted->values()->all();
预期输出:
[
#769
+"website": "google",
+"url": "google.com",
,
#762
+"website": "twitter",
+"url": "twitter.com",
,
]
请参阅文档https://laravel.com/docs/5.1/collections#available-methods
toArray
方法将集合转换为普通的 PHP 数组。如果集合的值是 Eloquent 模型,模型也会被转换为数组。
all
方法返回集合表示的底层数组。
【讨论】:
正是我想要的!谢谢,我了解它现在是如何工作的,并且在我测试它时也有效。 :) 简答:使用collect($arr)
。
简短回答扩展:有不同的集合。 1. collect(array $array) 或 2. new \Illuminate\Database\Eloquent\Collection(array $array)。从 Illuminate\Database\Eloquent\Collection 类型返回的第一个集合。但是,在某些情况下,您需要 Eloquent 数据库集合,然后再使用第二个。【参考方案2】:
在我的例子中,我为了测试目的而制作了一个伪造服务的集合,所以我使用
$collection = new Collection();
foreach($items as $item)
$collection->push((object)['prod_id' => '99',
'desc'=>'xyz',
'price'=>'99',
'discount'=>'7.35',
]);
【讨论】:
以上是关于在 Laravel 中将数组转换为集合的主要内容,如果未能解决你的问题,请参考以下文章