如何重新排列多维数组?

时间:2016-05-17 20:12:23

标签: php mysql css multidimensional-array formatting

我有一个数组需要为一个数组重新排列。

我已经打破了我的脑袋并尝试了几种解决方案,但到目前为止我还没有解决问题的方法。

如何在PHP中重新排列多维数组?

我有这个数组:

Array
(
    [0] => Array
        (
            [pais_codigo] => UK
            [pista_nome] => LINGFIELD
            [corrida_hora] => 13:50:00
        )
[1] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => LINGFIELD
        [corrida_hora] => 14:20:00
    )

[2] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => LINGFIELD
        [corrida_hora] => 14:55:00
    )

[3] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => LINGFIELD
        [corrida_hora] => 15:25:00
    )

[4] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => LINGFIELD
        [corrida_hora] => 16:00:00
    )

[5] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => LINGFIELD
        [corrida_hora] => 16:30:00
    )

[6] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => LINGFIELD
        [corrida_hora] => 17:00:00
    )

[7] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => LINGFIELD
        [corrida_hora] => 17:35:00
    )

[8] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => NEWCASTLE
        [corrida_hora] => 14:00:00
    )

[9] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => NEWCASTLE
        [corrida_hora] => 14:35:00
    )

[10] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => NEWCASTLE
        [corrida_hora] => 15:05:00
    )

[11] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => NEWCASTLE
        [corrida_hora] => 15:40:00
    )

[12] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => NEWCASTLE
        [corrida_hora] => 16:10:00
    )

[13] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => NEWCASTLE
        [corrida_hora] => 16:40:00
    )

[14] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => NEWCASTLE
        [corrida_hora] => 17:10:00
    )

[15] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => NEWCASTLE
        [corrida_hora] => 17:45:00
    )

[16] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => NOTTINGHAM
        [corrida_hora] => 14:10:00
    )

[17] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => NOTTINGHAM
        [corrida_hora] => 14:45:00
    )

[18] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => NOTTINGHAM
        [corrida_hora] => 15:15:00
    )

[19] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => NOTTINGHAM
        [corrida_hora] => 15:50:00
    )

[20] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => NOTTINGHAM
        [corrida_hora] => 16:20:00
    )

[21] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => NOTTINGHAM
        [corrida_hora] => 16:50:00
    )

[22] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => NOTTINGHAM
        [corrida_hora] => 17:20:00
    )

[23] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => NOTTINGHAM
        [corrida_hora] => 17:55:00
    )

[24] => Array
    (
        [pais_codigo] => IRE
        [pista_nome] => KILLARNEY
        [corrida_hora] => 17:15:00
    )

[25] => Array
    (
        [pais_codigo] => IRE
        [pista_nome] => KILLARNEY
        [corrida_hora] => 17:50:00
    )

[26] => Array
    (
        [pais_codigo] => IRE
        [pista_nome] => KILLARNEY
        [corrida_hora] => 18:20:00
    )

[27] => Array
    (
        [pais_codigo] => IRE
        [pista_nome] => KILLARNEY
        [corrida_hora] => 18:50:00
    )

[28] => Array
    (
        [pais_codigo] => IRE
        [pista_nome] => KILLARNEY
        [corrida_hora] => 19:20:00
    )

[29] => Array
    (
        [pais_codigo] => IRE
        [pista_nome] => KILLARNEY
        [corrida_hora] => 19:50:00
    )

[30] => Array
    (
        [pais_codigo] => IRE
        [pista_nome] => KILLARNEY
        [corrida_hora] => 20:20:00
    )

[31] => Array
    (
        [pais_codigo] => IRE
        [pista_nome] => KILLARNEY
        [corrida_hora] => 20:50:00
    )

[32] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => HUNTINGDON
        [corrida_hora] => 17:25:00
    )

[33] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => HUNTINGDON
        [corrida_hora] => 18:00:00
    )

[34] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => HUNTINGDON
        [corrida_hora] => 18:30:00
    )

[35] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => HUNTINGDON
        [corrida_hora] => 19:00:00
    )

[36] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => HUNTINGDON
        [corrida_hora] => 19:30:00
    )

[37] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => HUNTINGDON
        [corrida_hora] => 20:00:00
    )

[38] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => HUNTINGDON
        [corrida_hora] => 20:30:00
    )

[39] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => WETHERBY
        [corrida_hora] => 17:40:00
    )

[40] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => WETHERBY
        [corrida_hora] => 18:10:00
    )

[41] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => WETHERBY
        [corrida_hora] => 18:40:00
    )

[42] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => WETHERBY
        [corrida_hora] => 19:10:00
    )

[43] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => WETHERBY
        [corrida_hora] => 19:40:00
    )

[44] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => WETHERBY
        [corrida_hora] => 20:10:00
    )

[45] => Array
    (
        [pais_codigo] => UK
        [pista_nome] => WETHERBY
        [corrida_hora] => 20:40:00
    )

)

并希望成功:

    Array
(
    [0] => UK
    [1] => Lingfield
    [2] => 13:50
    [3] => 14:20
    [4] => 14:55
    [5] => 15:25
    [6] => 16:00
    [7] => 16:30
    [8] => 17:00
    [9] => 17:35
    [10] => UK
    [11] => Newcastle
    [12] => 14:00
    [13] => 14:35
    [14] => 15:05
    [15] => 15:40
    [16] => 16:10
    [17] => 16:40
    [18] => 17:10
    [19] => 17:45
    [20] => UK
    [21] => Nottingham
    [22] => 14:10
    [23] => 14:45
    [24] => 15:15
    [25] => 15:50
    [26] => 16:20
    [27] => 16:50
    [28] => 17:20
    [29] => 17:55
    [30] => IRE
    [31] => Killarney
    [32] => 17:15
    [33] => 17:50
    [34] => 18:20
    [35] => 18:50
    [36] => 19:20
    [37] => 19:50
    [38] => 20:20
    [39] => 20:50
    [40] => UK
    [41] => Huntingdon
    [42] => 17:25
    [43] => 18:00
    [44] => 18:30
    [45] => 19:00
    [46] => 19:30
    [47] => 20:00
    [48] => 20:30
    [49] => UK
    [50] => Wetherby
    [51] => 17:40
    [52] => 18:10
    [53] => 18:40
    [54] => 19:10
    [55] => 19:40
    [56] => 20:10
    [57] => 20:40
)

目的是什么?建立一个类似于此的表:

My Table Final

1 个答案:

答案 0 :(得分:0)

我认为这不是一个好主意,而只是为了回答你的问题。你可以这样做:

$pais_codigo = null;
$pista_nome = null;

$result = array_reduce($array, function($carry, $elem) use (&$pais_codigo, &$pista_nome) {
    if ($pais_codigo != $elem['pais_codigo'] || $pista_nome !=  $elem['pista_nome']) {
        $carry = array_merge(
            $carry,
            [
                $elem['pais_codigo'],
                $elem['pista_nome'],
            ]
        );

        $pais_codigo = $elem['pais_codigo'];
        $pista_nome = $elem['pista_nome'];
    }

    return array_merge(
        $carry,
        [$elem['corrida_hora']]
    );
}, []);

这是一种"功能性编程"样式。如果您阅读array_reduce,您将看到它用于遍历数组元素并将数组减少为一个值。在那里我们将得到另一个数组,而不是标量值。我们以空数组作为初始值开始,如果'pais_codigo''pista_nome'更改,我们将它们添加到该数组,否则只添加{{1} }。

这是demo code