use*_*908 15 collections laravel laravel-5
我在PHP中有以下数组:
[
{
"website": "example",
"url": "example.com"
},
{
"website": "example",
"url": "example.com"
}
]
Run Code Online (Sandbox Code Playgroud)
现在我想把它转换成一个集合,所以我按键website或者排序url.但是当我这样做时:
$myArray = collect(websites);
Run Code Online (Sandbox Code Playgroud)
我得到了这个:
{
"0": {
"website": "example",
"url": "example.com"
},
"1": {
"website": "example",
"url": "example.com"
}
}
Run Code Online (Sandbox Code Playgroud)
并且排序不起作用,我想知道我做错了什么以及如何修复它所以我有一个我可以轻松排序的对象的数组集合.
编辑: 我希望输出与此相同:
[
{
"website": "example",
"url": "example.com"
},
{
"website": "example",
"url": "example.com"
}
]
Run Code Online (Sandbox Code Playgroud)
通过"排序不起作用"我的意思是项目没有排序.
Jon*_*han 30
如果你有
$collection = collect([
(object) [
'website' => 'twitter',
'url' => 'twitter.com'
],
(object) [
'website' => 'google',
'url' => 'google.com'
]
]);
Run Code Online (Sandbox Code Playgroud)
然后,将您的数组包装在Collection类的实例中.这意味着它不会像典型的数组一样( - 它会像数组一样,但不要像对待它一样 - ),直到你调用它all()或toArray()它为止.要删除您需要使用的任何添加的索引values().
$sorted = $collection->sortBy('website');
$sorted->values()->all();
Run Code Online (Sandbox Code Playgroud)
预期产量:
[
{#769
+"website": "google",
+"url": "google.com",
},
{#762
+"website": "twitter",
+"url": "twitter.com",
},
]
Run Code Online (Sandbox Code Playgroud)
请参阅文档https://laravel.com/docs/5.1/collections#available-methods
该toArray方法将集合转换为普通的PHP数组.如果集合的值是Eloquent模型,则模型也将转换为数组.
该all方法返回集合表示的基础数组.
在我的情况下,我正在制作一个集合来伪造服务以用于测试目的,所以我使用
$collection = new Collection();
foreach($items as $item){
$collection->push((object)['prod_id' => '99',
'desc'=>'xyz',
'price'=>'99',
'discount'=>'7.35',
]);
}
Run Code Online (Sandbox Code Playgroud)