2016-05-17 3 views
-1

У меня есть массив, который нужно переставить для одного массива.Как перенастроить многомерный массив?

Я сломал себе голову и попробовал несколько решений, но до сих пор у меня нет решения для моей проблемы.

Как можно переставить многомерный массив в 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

+2

Почему этот вопрос помечен тегом [tag: mysql]? Если данные возникают там, вероятно, лучшее решение, чем использование массивов PHP. – eggyal

+1

Возможный дубликат [Поворот многомерного массива в одномерный массив] (http://stackoverflow.com/questions/8611313/turning-multidimensional-array-into-one-dimensional-array) – manniL

+0

Вам действительно нужны эти данные организованный таким образом в массиве, или вы просто хотите отобразить/распечатать его в представленном виде? – michaJlS

ответ

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' изменены, мы добавляем их в этот массив, иначе добавляем только 'corrida_hora'.

Адрес demo code.