PHP将每列的数组重新分组为多个没有循环的数组
在Laravel DB返回中,即->get()->toArray()
的结果如下:
[
['ts' => 1234, 'a' => 3, 'b' => 2],
['ts' => 1244, 'a' => 2, 'b' => 6],
['ts' => 1254, 'a' => 8, 'b' => 3],
]
有什么方法可以将数据转换成这样:
[
['column' => 'a', 'values' => [[1234, 3], [1244, 2], [1254, 8]],
['column' => 'b', 'values' => [[1234, 2], [1244, 6], [1254, 3]],
]
我只想知道是否有任何最佳/有效的方法来进行如上所述的转换。 避免再次循环,因为数据已经可用,可以将其视为数据格式化问题。另外,我不希望使用其他数组。
我已经看过的东西包括->get()->map(function())
,但这是连续的,因此我无法在二维数组中得到values
。
答案 0 :(得分:2)
您将要映射到您的项目并分别返回$items = Model::all();
$result = [
[
'column' => 'a',
'values' => $items->map(function ($item) {
return [$item->ts, $item->a];
})
],
[
'column' => 'b',
'values' => $items->map(function ($item) {
return [$item->ts, $item->b];
})
],
];
值和每一列的值:
$items = Model::all();
$result = collect(['a', 'b'])->map(function ($column) use ($items) {
$values = $items->map(function ($item) use ($column) {
return [$item->ts, $item->{$column}];
});
return compact('column', 'values');
});
如果您想将两列的逻辑结合起来,请创建一个列名的集合,并映射到它们:
external.d.ts