【问题标题】:Convert Single Array to multidimensional array on PHP [closed]在 PHP 上将单个数组转换为多维数组 [关闭]
【发布时间】:2019-04-19 10:03:12
【问题描述】:

我在 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


【解决方案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] => 
                        )

                )

        )

)

【讨论】:

    【解决方案2】:

    你可以这样处理

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 2018-10-31
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 2011-10-10
      相关资源
      最近更新 更多