PHP实现数组键值映射及按reg_no分组排序JSON数组的方法
嘿,我来帮你解决这两个PHP的问题,一步步来哈~
问题1:如何使用PHP将数组映射为键值对?
PHP里有好几种实用的方法实现这个需求,我给你列几个常用的:
方法1:用array_column()函数(最便捷)
如果你的数组是关联数组/对象数组,想把某一列作为键、另一列作为值,array_column()直接就能搞定:
// 示例数组 $users = [ ['id' => 1, 'name' => 'Alice'], ['id' => 2, 'name' => 'Bob'], ['id' => 3, 'name' => 'Charlie'] ]; // 把id作为键,name作为值 $keyValuePairs = array_column($users, 'name', 'id'); print_r($keyValuePairs); // 输出:Array ( [1] => Alice [2] => Bob [3] => Charlie )
方法2:手动循环遍历
如果需要更灵活的逻辑(比如对值做额外加工),可以用循环手动构建:
$users = [ ['id' => 1, 'name' => 'Alice'], ['id' => 2, 'name' => 'Bob'] ]; $keyValuePairs = []; foreach ($users as $user) { // 这里可以加额外处理,比如把name转成大写 $keyValuePairs[$user['id']] = strtoupper($user['name']); } print_r($keyValuePairs); // 输出:Array ( [1] => ALICE [2] => BOB )
方法3:用array_combine()函数
如果已经有单独的键数组和值数组,直接用这个函数合并:
$keys = [1, 2, 3]; $values = ['Alice', 'Bob', 'Charlie']; $keyValuePairs = array_combine($keys, $values); print_r($keyValuePairs); // 输出:Array ( [1] => Alice [2] => Bob [3] => Charlie )
问题2:按reg_no对JSON数组排序分组合并
你的需求应该是把相同reg_no的条目合并,比如把同一个学生的多个paper_code整合到一起对吧?我给你写个完整的实现步骤:
步骤1:解码JSON为PHP数组
首先得把你输出的JSON转成PHP能操作的数组:
$jsonStr = '[ { "first_name":"robin", "last_name":"sahoo", "reg_no":12, "paper_code":"BA001" }, { "first_name":"robin", "last_name":"sahoo", "reg_no":12, "paper_code":"BA002" }, { "first_name":"Rama", "last_name":"Nayidu", "reg_no":13, "paper_code":"BA001" } ]'; // 解码成关联数组 $originalArray = json_decode($jsonStr, true);
步骤2:按reg_no分组并合并数据
遍历数组,把相同reg_no的条目里的paper_code收集起来,其他固定字段保留(同一个reg_no的姓名应该一致):
$groupedArray = []; foreach ($originalArray as $item) { $regNo = $item['reg_no']; // 如果这个reg_no还没在分组里,先初始化基本信息 if (!isset($groupedArray[$regNo])) { $groupedArray[$regNo] = [ 'first_name' => $item['first_name'], 'last_name' => $item['last_name'], 'reg_no' => $regNo, 'paper_codes' => [] // 用来存多个paper_code ]; } // 把当前的paper_code加入数组 $groupedArray[$regNo]['paper_codes'][] = $item['paper_code']; } // 把关联数组转成索引数组(和原输出格式一致) $groupedArray = array_values($groupedArray);
步骤3:编码回JSON输出
最后把处理好的数组转成JSON:
echo json_encode($groupedArray, JSON_PRETTY_PRINT);
最终输出效果
同一个reg_no的paper_code会被整合到一个数组里:
[ { "first_name": "robin", "last_name": "sahoo", "reg_no": 12, "paper_codes": [ "BA001", "BA002" ] }, { "first_name": "Rama", "last_name": "Nayidu", "reg_no": 13, "paper_codes": [ "BA001" ] } ]
如果你想把paper_code改成逗号分隔的字符串,只需要把收集paper_code的代码改成:
$groupedArray[$regNo]['paper_codes'] .= ($groupedArray[$regNo]['paper_codes'] ? ',' : '') . $item['paper_code'];
内容的提问来源于stack exchange,提问作者satya
相关产品推荐
相关产品推荐

