PHP将每列的数组重新分组为多个没有循环的数组

时间:2019-01-11 03:38:05

标签: php arrays laravel dictionary

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

1 个答案:

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