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
相关产品推荐
相关产品推荐

