2011-05-10 13 views
8

Tengo problemas para ordenar una matriz de la manera que quiero.Matriz de ordenación PHP por marca de tiempo

Este es un ejemplo de salida de mi matriz: http://pastebin.com/GJNBmqL7

de datos proviene de varias bases de datos a la vez, así que estoy limitado en la forma en que puse los datos en el arreglo.

El [2] siempre contiene una marca de tiempo linux. Ahora quiero que toda la matriz sea ordenada por esa marca de tiempo, con el valor más bajo primero.

¿Cómo puedo hacer eso?

Respuesta

6

aquí un ejemplo array_multisort:

foreach ($array as $key => $node) { 
    $timestamps[$key] = $node[2]; 
} 
array_multisort($timestamps, SORT_ASC, $array); 
+0

Gracias, eso funcionó como un encanto. –

11

uso usort que acepte la función personalizada para ordenar matrices:

usort

su función puede ser algo como:

function cmp($a, $b) 
{ 
    if ($a[2] == $b[2]) { 
     return 0; 
    } 
    return ($a[2] < $b[2]) ? -1 : 1; 
} 
0
function cmp($a, $b) 
{ 
    if ($a[2] == $b[2]) { 
     return 0; 
    } 
    return ($a[2] < $b[2]) ? -1 : 1; 
} 

$data = array(/* your data */); 

usort($data, "cmp"); 
0

Podría ser fácil r para insertar los datos en una sola tabla temporal, luego SELECCIONE, con ORDER BY timestamp

6

Puede hacerlo simplemente mediante una ordenación personalizada. Así que asumiendo que su marca de fecha es siempre el índice 2:

function sortArray($a1, $a2){ 
    if ($a1[2] == $a2[2]) return 0; 
    return ($a1[2] > $a2[2]) ? -1 : 1; 
} 

usort($array, "sortArray"); 
0

Esto se puede lograr con el siguiente código.

usort($variable, function ($a, $b) { 
if ($a['timestamp'] == $b['timestamp']) { 
    return 0; 
} 
return ($a['timestamp'] < $b['timestamp']) ? 1 : -1; 

});

Esto dará como resultado una matriz ordenada de $ variable, suponiendo que la marca de tiempo está en $ variable [0] ['timestamp']; $ variable [0] ['timestamp']; y así sucesivamente.

Cuestiones relacionadas