PHP:使用 array_map 向数组添加维度?

PHP: Add a dimension to an array using array_map?

我有一个数组,我想添加一个维度。我想使用数组

中的 position 列对其进行分组
$view_rows = [];

Array
(
    [row] => Array
        (
            [0] => Array
                (
                    [position] => 1
                    [image_id] => 2809
                    [basename] => rj5ed2c90f609423.26673093.jpg
                )

            [1] => Array
                (
                    [position] => 1
                    [image_id] => 2808
                    [basename] => rj5ed2c8eccc9c06.91700011.jpg
                )

            [2] => Array
                (
                    [position] => 2
                    [image_id] => 2807
                    [basename] => rj5ed2c77ef32b76.96579137.jpg
                )
        )
)

添加维度后(按 location 分组),它应该如下所示:

Array
(
    [rows] => Array
        (
            [1] => Array
                (
                    [0] => Array
                        (
                            [position] => 1
                            [image_id] => 2809
                            [basename] => rj5ed2c90f609423.26673093.jpg
                        )

                    [1] => Array
                        (
                            [position] => 1
                            [image_id] => 2808
                            [basename] => rj5ed2c8eccc9c06.91700011.jpg
                        )
                )

            [2] => Array
                (
                    [0] => Array
                        (
                            [position] => 2
                            [image_id] => 2807
                            [basename] => rj5ed2c77ef32b76.96579137.jpg
                        )
                )
        )
)

是否有 PHP 函数可以做到这一点?如果没有,我将使用良好的旧循环方法。

我在这里做了一些研究 (),我相信可以使用 array_map.

来实现

我已经试过了,没有成功(我很接近)

$new_array = array_map(function($x) {
    return [$x[0]['position'] => $x];
}, $view_rows);

由于需要改变数组的结构,所以不能用array_map, but you can use array_reduce得到想要的结果:

$data['rows'] = array_reduce($data['rows'], function ($c, $a) {
    $c[$a['position']][] = $a;
    return $c;
}, array());

输出:

Array
(
    [rows] => Array
        (
            [1] => Array
                (
                    [0] => Array
                        (
                            [position] => 1
                            [image_id] => 2809
                            [basename] => rj5ed2c90f609423.26673093.jpg
                        )
                    [1] => Array
                        (
                            [position] => 1
                            [image_id] => 2808
                            [basename] => rj5ed2c8eccc9c06.91700011.jpg
                        )    
                )    
            [2] => Array
                (
                    [0] => Array
                        (
                            [position] => 2
                            [image_id] => 2807
                            [basename] => rj5ed2c77ef32b76.96579137.jpg
                        )    
                )    
        )    
)

Demo on 3v4l.org

@Nick 的回答有效,但同样的事情可以使用简单的 foreach 循环轻松实现,因此每个人都能理解。

$result = [];
foreach($data['rows'] as $row) {
    $result[$row['position']][] = $row;
}