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

PHP中将Excel来源数组转换为分组多维数组的方案咨询

嘿,这问题我熟!要把你的原始数组转换成按code和date分组的结构,其实用PHP的循环遍历+分组逻辑就能轻松搞定,我给你两种常用的实现方式,你可以按需选:

方法一:普通foreach循环(直观易懂)

这种方式逻辑清晰,一步步处理每个元素,很容易调试:

$array = [
    ["JVPM12019030050", "31-Mar-19", 612011005, "Lorem ipsum", "Lorem ipsum", 40000001, NULL],
    ["JVPM12019030050", "31-Mar-19", 622011005, "Lorem ipsum", "Lorem ipsum", 40000002, NULL],
    ["JVPM12019030050", "31-Mar-19", 642011005, "Lorem ipsum", "Lorem ipsum", 40000003, NULL],
    ["JVPM12019030050", "31-Mar-19", 652011005, "Lorem ipsum", "Lorem ipsum", 40000004, NULL],
    ["JVPM12019030051", "01-Apr-19", 672011005, "Lorem ipsum", "Lorem ipsum", 50000005, NULL],
    ["JVPM12019030051", "01-Apr-19", 682011005, "Lorem ipsum", "Lorem ipsum", 60000005, NULL],
    ["JVPM12019030051", "01-Apr-19", 692011005, "Lorem ipsum", "Lorem ipsum", 70000005, NULL],
    ["JVPM12019030051", "01-Apr-19", 652011005, "Lorem ipsum", "Lorem ipsum", 80000005, NULL]
];

$new_array = [];

foreach ($array as $item) {
    // 提取当前元素的code和date作为分组依据
    $code = $item[0];
    $date = $item[1];
    // 用code+date拼接成唯一分组键,避免重复分组
    $groupKey = $code . '|' . $date;
    
    // 如果分组不存在,先初始化结构
    if (!isset($new_array[$groupKey])) {
        $new_array[$groupKey] = [
            'code' => $code,
            'date' => $date,
            'data' => []
        ];
    }
    
    // 把当前元素除前两项外的内容加入data数组
    $new_array[$groupKey]['data'][] = array_slice($item, 2);
}

// 去掉临时分组键,转换成纯索引数组
$new_array = array_values($new_array);

print_r($new_array);

方法二:用array_reduce(更简洁)

如果你偏爱函数式编程风格,array_reduce能让代码更紧凑,逻辑和第一种完全一致:

$new_array = array_values(array_reduce($array, function($carry, $item) {
    $groupKey = $item[0] . '|' . $item[1];
    if (!isset($carry[$groupKey])) {
        $carry[$groupKey] = [
            'code' => $item[0],
            'date' => $item[1],
            'data' => []
        ];
    }
    $carry[$groupKey]['data'][] = array_slice($item, 2);
    return $carry;
}, []));

print_r($new_array);

小提醒

你示例里第二个分组的code写的是JVPM12019030052,但原始数组里是JVPM12019030051,代码会严格按照原始数据的code分组,你可以根据实际需求调整;另外如果你的code和date是一一绑定的,也可以只用code当分组键,但用两者组合能避免同一code对应不同date的混乱情况。

内容的提问来源于stack exchange,提问作者Arny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:06:24