You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:23:48