php - 如何使用键值在多维数组中移动数组?
问题描述
如何使用键值移动多维数组中的数组?我正在使用 array_push 将值添加到多维数组。我有一个数组
$myArray = Array(Array('code' => '1','room' => Array('name' => 'Room-A')),Array('code' =>'1','room' => Array('name' => 'Room-B'
)), Array('code' => '2','room' => Array('name' => 'Vip-1')),Array('code' => '2','room' => Array('name' => 'Vip-2')));
我尝试使用这样的代码:
for ($i=0; $i <count($myArray) ; $i++) {
if ($myArray[$i]['code']=='1') {
array_push($myArray[$i]['room'], $myArray[$i]['room']);
}
else{
array_push($myArray[$i]['room'], $myArray[$i]['room']);
}
}
我想要这样的结果:
Array
(
[0] => Array
(
[code] => 1
[room] => Array
(
[0] => Array
(
[name] => Room-A
)
[1] => Array
(
[name] => Room-B
)
)
)
[1] => Array
(
[code] => 2
[room] => Array
(
[0] => Array
(
[name] => Vip-1
)
[1] => Array
(
[name] => Vip-2
)
)
)
)
知道如何加入这个数组吗?
解决方案
您可以使用array_reduce
代码作为键将数组汇总为关联数组。用于array_values
将关联数组转换为简单数组。
$myArray = ....
$result = array_values(array_reduce($myArray, function($c, $v){
if ( !isset( $c[ $v['code'] ] ) ) $c[ $v['code'] ] = array( 'code' => $v['code'], 'room' => array() );
$c[ $v['code'] ]['room'][] = $v['room'];
return $c;
},array()));
echo "<pre>";
print_r( $result );
echo "</pre>";
这将导致:
Array
(
[0] => Array
(
[code] => 1
[room] => Array
(
[0] => Array
(
[name] => Room-A
)
[1] => Array
(
[name] => Room-B
)
)
)
[1] => Array
(
[code] => 2
[room] => Array
(
[0] => Array
(
[name] => Vip-1
)
[1] => Array
(
[name] => Vip-2
)
)
)
)
推荐阅读
- azure - 在 Azure 服务总线(pub-sub)中的主题下创建的订阅的侦听器(订阅客户端)的数量是否有任何限制?
- javascript - 我想在 Nodejs 中将一个值从一个文件导出到另一个文件
- matlab - 修改双线性插值matlab代码以放大图像
- c - AVR I/O 宏定义如何工作以允许访问寄存器?
- python - 如何处理 CV2(Cv2.imwrite) 中的错误?
- python - 如何仅比较包含相同列信息的两个文件的一部分?
- django - 在django中过滤对象时传递外键参数
- unit-testing - 我有一个 apache camel 测试用例,由于创建了不同的对象实例而失败。对象实例具有不同的 ID
- excel - 复制工作表 1 中的范围并粘贴到循环中下一张工作表的下一个空行
- python - 从子目录和子目录中导入时如何解决冲突的导入要求?