我有下面的数组:
$arr[123]['price'] = 100;
$arr[456]['price'] = 500;
$arr[100]['price'] = 1000;
$arr[511]['price'] = 200;
现在,我想按价格对其进行排序,因此我进行了以下操作:
$arr = collect($arr);
$sorted = $arr->sortBy('price');
数组被排序&dd($ sorted)给我下面的结果:
Collection {#957 ▼
#items: array:4 [▼
123 => array:1 [▼
"price" => 100
]
511 => array:1 [▼
"price" => 200
]
456 => array:1 [▼
"price" => 500
]
100 => array:1 [▼
"price" => 1000
]
]
}
但是当我返回上面的排序数组时,它将再次通过键进行排序:
return $sorted;
以上输出:
{
"100": {
"price": 1000
},
"123": {
"price": 100
},
"456": {
"price": 500
},
"511": {
"price": 200
}
}
我知道values()将解决此问题,但我不想重新索引。我只想以以下格式返回数组:
{
"123": {
"price": 100
},
"511": {
"price": 200
},
"456": {
"price": 500
},
"100": {
"price": 1000
}
}
任何人都不知道该如何获得吗?我也尝试过$ preserveKeys标志,但没有成功。
我正在使用Laravel 5.8.35
对于PHP array
PHP中的数组实际上是有序映射。
所以收集结果是有序的。
但是,我认为您的响应是JSON对象。
对象是对象类型的成员。它是属性的无序集合,每个都包含一个原始值,对象或函数。存储在对象属性中的函数称为方法。
因此,如果您需要索引和顺序,也许可以构造如下结构:
[
{
"index": "123",
"price": 100
},
{
"index": "511",
"price": 200
},
{
"index": "456",
"price": 500
},
{
"index": "100",
"price": 1000
}
]
所以这是一个有序数组,每个元素都是对象。
尝试使用:
$sorted=collect($arr)->sortBy('price')->reverse()->toArray()
您可以使用
return $sorted->values()->all();
如官方文档中所述https://laravel.com/docs/5.8/collections#method-sortby