二维数组合并成三维数组

[["id"=>1,"name"=>"mi5","pp"=>"xiaomi"],
 ["id"=>2,"name"=>"ip5","pp"=>"apple"],
 ["id"=>3,"name"=>"ip6","pp"=>"xiaomi"],
 ["id"=>4,"name"=>"ip6","pp"=>"apple"]
];

以二维数组中的name 和 pp 相同的值分组

结果是:

[["id"=>1,"name"=>"mi5","pp"=>"xiaomi"],
 ["id"=>2,"name"=>"ip5","pp"=>"apple"],
 [["id"=>3,"name"=>"ip6","pp"=>"apple"],
 ["id"=>4,"name"=>"ip6","pp"=>"apple"]]
];

相同name和pp被分到三维数组中,这是一个例子,实际分类的条件有四个,而且每个的值都很长。求解,目前只能想到两层遍历。
阅读 4.3k
1 个回答
<?php
$array = [
     ["id"=>1,"name"=>"mi5","pp"=>"xiaomi"],
     ["id"=>2,"name"=>"ip5","pp"=>"apple"],

     ["id"=>3,"name"=>"ip6","pp"=>"apple"],
     ["id"=>3,"name"=>"ip6","pp"=>"ip"],
     ["id"=>4,"name"=>"ip6","pp"=>"apple"]
    ];
/*
[
 ["id"=>1,"name"=>"mi5","pp"=>"xiaomi"],
 ["id"=>2,"name"=>"ip5","pp"=>"apple"],
 [
     ["id"=>3,"name"=>"ip6","pp"=>"apple"],
     ["id"=>4,"name"=>"ip6","pp"=>"apple"]
 ]
];
*/

$container = [];
array_map(function( $val ) use ( &$container ) {
    $container[ $val['name'].$val['pp'] ][] = $val; 
}, $array);

var_dump(array_values($container));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题