我有这样的数组结构:
Array
(
[platform] => Nintendo
[console] => Nintendo NES
)
1
Array
(
[platform] => Nintendo
[console] => Super Nintendo
)
1
Array
(
[platform] => Nintendo
[console] => Nintendo 64
)
1
Array
(
[platform] => Nintendo
[console] => Gamecube
)
Array
(
[platform] => Atari
[console] => Atari 2600
)
1
Array
(
[platform] => Atari
[console] => Atari 5200
)
1
Array
(
[platform] => Atari
[console] => Atari 7800
)
Array
(
[platform] => Sega
[console] => Sega Master System
)
1
Array
(
[platform] => Sega
[console] => Sega Genesis
)
1
Array
(
[platform] => Sega
[console] => Sega CD
)我想要将控制台合并到各自平台下的一个数组中,并了解如何使用唯一索引来执行此操作,而不是在它们相同的地方。我想要的输出是这样的:
Array
(
[Nintendo] => Array
(
[0] => Nintendo NES
[1] => Super Nintendo
[2] => Nintendo 64
[3] => Gamecube
)
[Atari] => Array
(
[0] => Atari 2600
[1] => Atari 5200
[2] => Atari 7800
)
[Sega] => Array
(
[0] => Sega Master System
[1] => Sega Genesis
[2] => Sega CD
)
)我尝试了以下几种方法:
$new = [];
foreach($arr as $key => $value){
if(is_array($value)){
if( !array_key_exists($value['platform'],$new) ){
$new[$value['platform']] = [];
}
$new[$value['platform']] = array_merge($new[$value['platform']], $value );
}
} 然而,它只返回每个平台中的最后一个控制台,因为它们没有唯一的控制台in。这是否需要正则表达式来查找匹配的平台名称和不匹配的控制台名称?我的方向是对的吗?还是应该向array_reduce或array_walk看齐?
发布于 2019-05-10 02:54:44
不确定为什么要检查它是否是循环中的数组,您可以删除该部分,然后使用[]在控制台中将其添加到现有列表中。
$new = [];
foreach($arr as $key => $value){
if( !array_key_exists($value['platform'],$new) ){
$new[$value['platform']] = [];
}
$new[$value['platform']][] = $value['console'] ;
} https://stackoverflow.com/questions/56065764
复制相似问题