如何按国家和学校对二维学生数组进行嵌套分组?
按国家和学校嵌套分组二维数组的实现方案
给定存储学生信息的二维数组,要按「国家」→「学校」的层级嵌套分组,把同一国家同一学校的学生信息归到对应层级下,用PHP可以这么实现:
基础实现方法(兼容所有PHP版本)
$students = [ [ "country" => "japan", "school" => "kyoto university", "name" => "Naruto Uzumaki" ], [ "country" => "usa", "school" => "harvard university", "name" => "Naruto Uzumaki" ], [ "country" => "japan", "school" => "tokyo university", "name" => "sasuke Uchiha" ], [ "country" => "japan", "school" => "tokyo university", "name" => "kakashi hatake" ], ]; $grouped = []; foreach ($students as $student) { $country = $student['country']; $school = $student['school']; // 检查国家分组是否存在,不存在就初始化 if (!isset($grouped[$country])) { $grouped[$country] = []; } // 检查该国家下的学校分组是否存在,不存在就初始化 if (!isset($grouped[$country][$school])) { $grouped[$country][$school] = []; } // 将当前学生信息加入对应分组 $grouped[$country][$school][] = $student; } // 可选:打印结果验证 echo '<pre>' . print_r($grouped, true) . '</pre>';
简洁写法(PHP 7+ 支持)
PHP 7及以上版本会自动为不存在的数组层级创建结构,代码可以简化成这样:
$grouped = []; foreach ($students as $student) { $country = $student['country']; $school = $student['school']; $grouped[$country][$school][] = $student; }
最终分组结果
运行后会得到符合预期的嵌套结构:
[ "japan" => [ "kyoto university" => [ [ "country" => "japan", "school" => "kyoto university", "name" => "Naruto Uzumaki" ], ], "tokyo university" => [ [ "country" => "japan", "school" => "tokyo university", "name" => "sasuke Uchiha" ], [ "country" => "japan", "school" => "tokyo university", "name" => "kakashi hatake" ], ], ], "usa" => [ "harvard university" => [ [ "country" => "usa", "school" => "harvard university", "name" => "Naruto Uzumaki" ], ] ] ]
内容的提问来源于stack exchange,提问作者joshoe
相关产品推荐
相关产品推荐

