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
会为您提供与输入相同结构的结果。