无法在Laravel中使用保留键返回排序后的数组

问题描述 投票:0回答:3

我有下面的数组:

$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 laravel laravel-5.8 laravel-collection
3个回答
1
投票

对于PHP array

PHP中的数组实际上是有序映射

所以收集结果是有序的。

但是,我认为您的响应是JSON对象。

对象是对象类型的成员。它是属性的无序集合,每个都包含一个原始值,对象或函数。存储在对象属性中的函数称为方法。

因此,如果您需要索引和顺序,也许可以构造如下结构:

[
      {
        "index": "123",
        "price": 100
      },
      {
        "index": "511",
        "price": 200
      },
      {
        "index": "456",
        "price": 500
      },
      {
        "index": "100",
        "price": 1000
      }
    ]

所以这是一个有序数组,每个元素都是对象。


0
投票

尝试使用:

$sorted=collect($arr)->sortBy('price')->reverse()->toArray()

0
投票

您可以使用

return $sorted->values()->all();

如官方文档中所述https://laravel.com/docs/5.8/collections#method-sortby

© www.soinside.com 2019 - 2024. All rights reserved.