JSON_ENCODE 的结果是一个对象,而非预期的数组

遇到此问题需要检查数据源的连续性

$data = [
    ['id' => 1, 'name' => 'jason', 'order' => 1],
    ['id' => 2, 'name' => 'nicy', 'order' => 3],
    ['id' => 3, 'name' => 'nell', 'order' => 2],
    ['id' => 4, 'name' => 'tony', 'order' => 5],
    ['id' => 5, 'name' => 'jack', 'order' => 4],
];

// 按照 order 升序
$fields = array_column($data, 'order');
array_multisort($fields, SORT_ASC, $data);
echo json_encode($data);

json_encode结果是一个数组:

[
  {
    "id": 1,
    "name": "jason",
    "order": 1
  },
  {
    "id": 3,
    "name": "nell",
    "order": 2
  },
  {
    "id": 2,
    "name": "nicy",
    "order": 3
  },
  {
    "id": 5,
    "name": "jack",
    "order": 4
  },
  {
    "id": 4,
    "name": "tony",
    "order": 5
  }
]

数据源添加上索引值:

$data = [
    0 => ['id' => 1, 'name' => 'jason', 'order' => 1],
    1 => ['id' => 2, 'name' => 'nicy', 'order' => 3],
    2 => ['id' => 3, 'name' => 'nell', 'order' => 2],
    3 => ['id' => 4, 'name' => 'tony', 'order' => 5],
    4 => ['id' => 5, 'name' => 'jack', 'order' => 4],
];
$data = collect($data);
$data = $data->sortBy('order');

echo json_encode($data->toArray());

json_encode 的输出结果是一个对象,并且 sortBy 的排序并没有被正确输出

{
  "0": {
    "id": 1,
    "name": "jason",
    "order": 1
  },
  "1": {
    "id": 2,
    "name": "nicy",
    "order": 3
  },
  "2": {
    "id": 3,
    "name": "nell",
    "order": 2
  },
  "3": {
    "id": 4,
    "name": "tony",
    "order": 5
  },
  "4": {
    "id": 5,
    "name": "jack",
    "order": 4
  }
}

json_encode 时,只输出数组中的 value

$data = [
    0 => ['id' => 1, 'name' => 'jason', 'order' => 1],
    1 => ['id' => 2, 'name' => 'nicy', 'order' => 3],
    2 => ['id' => 3, 'name' => 'nell', 'order' => 2],
    3 => ['id' => 4, 'name' => 'tony', 'order' => 5],
    4 => ['id' => 5, 'name' => 'jack', 'order' => 4],
];
$data = collect($data);
$data = $data->sortBy('order');

echo json_encode(array_values($data->toArray()));

json_encode的结果是一个数组,并且有按照预期排序输出:

[
  {
    "id": 1,
    "name": "jason",
    "order": 1
  },
  {
    "id": 3,
    "name": "nell",
    "order": 2
  },
  {
    "id": 2,
    "name": "nicy",
    "order": 3
  },
  {
    "id": 5,
    "name": "jack",
    "order": 4
  },
  {
    "id": 4,
    "name": "tony",
    "order": 5
  }
]

发表评论

您的电子邮箱地址不会被公开。