在Laravel中将数组转换为集合

时间:2018-03-03 11:15:57

标签: laravel laravel-5 collections

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

通过“排序不起作用”我的意思是这些项目没有排序。

2 个答案:

答案 0 :(得分:14)

如果你有

$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方法返回集合所代表的基础数组。

答案 1 :(得分:0)

在我的情况下,我正在收集产品以伪造服务以进行测试,所以我使用

$collection = new Collection();
    foreach($items as $item){
                $collection->push((object)['prod_id' => '99',
                                           'desc'=>'xyz',
                                           'price'=>'99',
                                           'discount'=>'7.35',

                ]);

            }