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

PHP:使用array_map向数组添加维度?,php,array-map,Php,Array Map,我有一个数组,我想添加一个维度。我想使用数组中的位置列对其进行分组 $view_rows = []; Array ( [row] => Array ( [0] => Array ( [position] => 1 [image_id] => 2809 [basename]

我有一个数组,我想添加一个维度。我想使用数组中的
位置
列对其进行分组

$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
                )
        )
)
添加维度(按
位置分组
)后,应如下所示:

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\u map
实现

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


由于需要更改数组的结构,因此不能使用,但可以使用以获得所需的结果:

$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
                        )    
                )    
        )    
)

由于需要更改阵列的结构,因此不能使用,但可以使用以获得所需的结果:

$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
                        )    
                )    
        )    
)

@Nick answer可以工作,但同样的事情也可以通过使用简单的foreach循环轻松实现,这样每个人都可以理解它

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

@Nick answer可以工作,但同样的事情也可以通过使用简单的foreach循环轻松实现,这样每个人都可以理解它

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

如果我不想更改结构,但将值分配给新数组,我可以使用array\u map吗?我已经调整了您的解决方案来实现这一点(将值分配给一个新数组),但我只是想知道我是否可以使用array\u map来实现这一点(我尝试了,但没有成功)@Marco,您可以更改分配,使用
$new\u array=array\u reduce(…)
而不是
$data['rows']=array\u reduce(…)
。您无法轻松使用
array\u map
,因为
array\u map
会给您一个与输入结构相同的结果。如果我不想更改结构,而是将值分配给新数组,我可以使用array\u map吗?我已经调整了您的解决方案来实现这一点(将值分配给一个新数组),但我只是想知道我是否可以使用array\u map来实现这一点(我尝试了,但没有成功)@Marco,您可以更改分配,使用
$new\u array=array\u reduce(…)
而不是
$data['rows']=array\u reduce(…)
。您不能轻易地使用
array\u map
,因为
array\u map
会为您提供与输入相同结构的结果。