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
)
)
)
)
@Nick 的回答有效,但同样的事情可以使用简单的 foreach 循环轻松实现,因此每个人都能理解。
$result = [];
foreach($data['rows'] as $row) {
$result[$row['position']][] = $row;
}
我有一个数组,我想添加一个维度。我想使用数组
中的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
)
)
)
)
@Nick 的回答有效,但同样的事情可以使用简单的 foreach 循环轻松实现,因此每个人都能理解。
$result = [];
foreach($data['rows'] as $row) {
$result[$row['position']][] = $row;
}