在 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"
  
]

现在我想将其转换为一个集合,因此我按 websiteurl 键排序。但是,当我这样做时:

$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 中将数组转换为集合的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中将二维数组转换为 json 对象

无法在laravel中将数组数组转换为没有索引的对象数组

在laravel中将对象转换为数组[重复]

在laravel中将对象转换为数组[重复]

在laravel 5.1中将对象转换为数组

在 laravel 控制器中将数组转换为 json