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
}
]