在PHP上将单个数组转换为多维数组[关闭]

问题描述 投票:-1回答:2

我从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]
        ]
    ],
];

请给我一些建议。谢谢之前。

php arrays multidimensional-array foreach
2个回答
1
投票

您可以使用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] => 
                        )

                )

        )

)

1
投票

你可以这样做

$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] => 
                        )

                )

        )

)
© www.soinside.com 2019 - 2024. All rights reserved.