Laravel分组集合返回对象而不是数组

时间:2018-06-28 15:53:25

标签: laravel laravel-collection

我有以下查询

$outings = Outing::all()->groupBy(function ($item) {
   return Carbon::parse($item['start'])->format('m/d/Y');
});

return response()->json([
    'outings' => $outings
], 200);

响应返回一个对象,我需要它返回一个数组 As you can see, outings is an object and not an array

如何使郊游成为数组而不是对象。

如果我不对集合进行分组,而只是做

Outing::all();

它将返回数组而不是对象。 Group by做的事情很奇怪。

如果我DD($ outings)实际上确实返回了一个集合,所以我认为将其返回到浏览器而不是数组时转换为对象是很奇怪的。

以下是我DD($ outings-> toArray())

时的输出

enter image description here

谢谢

4 个答案:

答案 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);

看看toArray()

也尝试

$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来帮助解决此问题。