我有一个数组需要为一个数组重新排列。
我已经打破了我的脑袋并尝试了几种解决方案,但到目前为止我还没有解决问题的方法。
如何在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
)
目的是什么?建立一个类似于此的表:
答案 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。