我从excel文件中得到如下数组:
$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 = [
[
"code" => "JVPM12019030050",
"date" => "31-Mar-19",
"data" => [
[612011005, "Lorem ipsum", "Lorem ipsum", 40000001, NULL],
[622011005, "Lorem ipsum", "Lorem ipsum", 40000002, NULL],
[642011005, "Lorem ipsum", "Lorem ipsum", 40000003, NULL],
[652011005, "Lorem ipsum", "Lorem ipsum", 40000004, NULL]
]
],
[
"code" => "JVPM12019030052",
"date" => "01-Apr-19",
"data" => [
[672011005, "Lorem ipsum", "Lorem ipsum", 50000005, NULL],
[682011005, "Lorem ipsum", "Lorem ipsum", 60000005, NULL],
[692011005, "Lorem ipsum", "Lorem ipsum", 70000005, NULL],
[652011005, "Lorem ipsum", "Lorem ipsum", 80000005, NULL]
]
],
];
请给我一些建议。谢谢之前。
您可以使用array_reduce
将数组汇总为关联数组,并使用$ code作为索引。使用array_shift
删除每个内部数组的第一个元素。
使用array_values
将关联数组转换为简单数组。
$array = //Your array
$new_array = array_values(array_reduce( $array , function( $c, $v ){
$code = array_shift( $v );
$date = array_shift( $v );
if ( !isset( $c[ $code ] ) ) $c[ $code ] = [ "code" => $code, "date" => $date, "data" => [] ];
$c[ $code ]["data"][] = $v;
return $c;
}, [] ));
$new_array
将导致:
Array
(
[0] => Array
(
[code] => JVPM12019030050
[date] => 31-Mar-19
[data] => Array
(
[0] => Array
(
[0] => 612011005
[1] => Lorem ipsum
[2] => Lorem ipsum
[3] => 40000001
[4] =>
)
[1] => Array
(
[0] => 622011005
[1] => Lorem ipsum
[2] => Lorem ipsum
[3] => 40000002
[4] =>
)
[2] => Array
(
[0] => 642011005
[1] => Lorem ipsum
[2] => Lorem ipsum
[3] => 40000003
[4] =>
)
[3] => Array
(
[0] => 652011005
[1] => Lorem ipsum
[2] => Lorem ipsum
[3] => 40000004
[4] =>
)
)
)
[1] => Array
(
[code] => JVPM12019030051
[date] => 01-Apr-19
[data] => Array
(
[0] => Array
(
[0] => 672011005
[1] => Lorem ipsum
[2] => Lorem ipsum
[3] => 50000005
[4] =>
)
[1] => Array
(
[0] => 682011005
[1] => Lorem ipsum
[2] => Lorem ipsum
[3] => 60000005
[4] =>
)
[2] => Array
(
[0] => 692011005
[1] => Lorem ipsum
[2] => Lorem ipsum
[3] => 70000005
[4] =>
)
[3] => Array
(
[0] => 652011005
[1] => Lorem ipsum
[2] => Lorem ipsum
[3] => 80000005
[4] =>
)
)
)
)
你可以这样做
$res = array();
foreach($array as $v){
if(array_key_exists($v[0], $res)){
array_push($res[$v[0]]['data'], array_slice($v,2, count($v)));
}
else{
$res[$v[0]] = [
'code' => $v[0],
'date' => $v[1],
'data' => []
];
array_push($res[$v[0]]['data'], array_slice($v,2, count($v)));
}
}
print_r(array_values($res));
结果:-
Array
(
[0] => Array
(
[code] => JVPM12019030050
[date] => 31-Mar-19
[data] => Array
(
[0] => Array
(
[0] => 612011005
[1] => Lorem ipsum
[2] => Lorem ipsum
[3] => 40000001
[4] =>
)
[1] => Array
(
[0] => 622011005
[1] => Lorem ipsum
[2] => Lorem ipsum
[3] => 40000002
[4] =>
)
[2] => Array
(
[0] => 642011005
[1] => Lorem ipsum
[2] => Lorem ipsum
[3] => 40000003
[4] =>
)
[3] => Array
(
[0] => 652011005
[1] => Lorem ipsum
[2] => Lorem ipsum
[3] => 40000004
[4] =>
)
)
)
[1] => Array
(
[code] => JVPM12019030051
[date] => 01-Apr-19
[data] => Array
(
[0] => Array
(
[0] => 672011005
[1] => Lorem ipsum
[2] => Lorem ipsum
[3] => 50000005
[4] =>
)
[1] => Array
(
[0] => 682011005
[1] => Lorem ipsum
[2] => Lorem ipsum
[3] => 60000005
[4] =>
)
[2] => Array
(
[0] => 692011005
[1] => Lorem ipsum
[2] => Lorem ipsum
[3] => 70000005
[4] =>
)
[3] => Array
(
[0] => 652011005
[1] => Lorem ipsum
[2] => Lorem ipsum
[3] => 80000005
[4] =>
)
)
)
)