我有以下查询
$outings = Outing::all()->groupBy(function ($item) {
return Carbon::parse($item['start'])->format('m/d/Y');
});
return response()->json([
'outings' => $outings
], 200);
如何使郊游成为数组而不是对象。
如果我不对集合进行分组,而只是做
Outing::all();
它将返回数组而不是对象。 Group by做的事情很奇怪。
如果我DD($ outings)实际上确实返回了一个集合,所以我认为将其返回到浏览器而不是数组时转换为对象是很奇怪的。
以下是我DD($ outings-> toArray())
时的输出谢谢
答案 0 :(得分:0)
尝试做:
$outings = Outing::all()->groupBy(function ($item) {
return Carbon::parse($item['start'])->format('m/d/Y');
});
return response()->json([
'outings' => $outings->toArray()
], 200);
答案 1 :(得分:0)
$outings = Outing::all()->groupBy(function ($item) {
return Carbon::parse($item['start'])->format('m/d/Y');
})->toArray();
return response()->json([
'outings' => $outings
], 200);
也尝试
$outings = Outing::all()->groupBy(function ($item) {
return Carbon::parse($item['start'])->format('m/d/Y');
})->toArray();
return response()->json([
'outings' => json_encode($outings)
], 200);
答案 2 :(得分:0)
如果要数组,请使用此
$outings = Outing::all()->groupBy(function ($item) {
return Carbon::parse($item['start'])->format('m/d/Y');
})->map(function($item){
return $item->all();
});
return response()->json($outings, 200);
如果您希望日期作为键,那么
$outings = Outing::all()->groupBy(function ($item) {
return Carbon::parse($item['start'])->format('m/d/Y');
});
return response()->json($outings->toArray(), 200);
答案 3 :(得分:0)
使用array_values($array)
强制将关联数组转换为JSON数组。但是,您将因此丢失任何键名。
$outings = Outing::all()->groupBy(function ($item) {
return Carbon::parse($item['start'])->format('m/d/Y');
});
return response()->json([
'outings' => array_values($outings)
], 200);
没有人真正解释为什么会这样。
在JavaScript / JSON中,数组只是值的集合,它们是带键的,但是键始终是数字顺序的。
在PHP中,数组是"key" => "value"
对的集合,键可以是任何值(整数或字符串),但是数组通常可以被认为是“关联的”(键是非数字或数字的,但不能用数字表示)序列”或“非关联”(键为数字AND顺序(类似于JS数组)。
在将PHP数组编码为JSON时,要说一个数组包含非数字的键,或者键是数字的但不是按顺序排列的(例如0、1、2、4、5、8、10) -这些类型的数组与JavaScript / JSON数组不兼容。在这种情况下,数组将转换为对象以保留键。要强制将数组转换为数组,必须将其转换为非关联数组(数字顺序键),PHP具有函数array_values
来帮助解决此问题。