Ordenar la matriz PHP por fecha ISO

Estoy tratando de ordenar una matriz en PHP por fecha y hora que está en formato ISO 8601. Todavía estoy tratando de comprender PHP y he probado muchas de las soluciones en el desbordamiento de pila y simplemente no puedo concretar la función correcta. Esperemos que esta sea una respuesta fácil y que sea útil para otros.

Para su información, esta matriz fue generada por la API de Citrix para GoToMeeting. Me gustaría ordenar la matriz en función de startTime en el primer momento de la lista.

Así es como se ve la matriz usando var_export con dos resultados presentados:

array (
 0 => stdClass::__set_state(
  array(
   'createTime' => '2012-07-03T19:36:58.+0000',
   'status' => 'INACTIVE',
   'subject' => 'Client 1',
   'startTime' => '2012-07-10T14:00:00.+0000',
   'conferenceCallInfo' => 'United States: xxxxx Access Code: xxxxx',
   'passwordRequired' => 'false',
   'meetingType' => 'Scheduled',
   'maxParticipants' => 26,
   'endTime' => '2012-07-10T15:00:00.+0000',
   'uniqueMeetingId' => 12345678,
   'meetingid' => 123456789,
  )
 ),
 1 => stdClass::__set_state(
  array(
   'createTime' => '2012-07-02T21:57:48.+0000',
   'status' => 'INACTIVE',
   'subject' => 'Client 2',
   'startTime' => '2012-07-06T19:00:00.+0000',
   'conferenceCallInfo' => 'United States: xxxxx Access Code: xxxxx',
   'passwordRequired' => 'false',
   'meetingType' => 'Scheduled',
   'maxParticipants' => 26,
   'endTime' => '2012-07-06T20:00:00.+0000',
   'uniqueMeetingId' => 12345678,
   'meetingid' => 123456789,
  )
 ),
)

Mi objetivo es luego generar la matriz en html div usando un bucle foreach, este código está completo y funciona bien, pero mi clasificación está desactivada :-)

¡Gracias de antemano por cualquier ayuda!

Steve

preguntado el 04 de julio de 12 a las 04:07

Lo bueno de iso8601 es que, por lo general, puede hacer una ordenación simple de cadenas y colocarlas en el orden correcto. Examinar usort () -

1 Respuestas

Puede implementar cualquier técnica de clasificación que se le ocurra si la envuelve en una devolución de llamada y usa usort() docs aquí

dentro de su devolución de llamada, puede usar strtotime o similar, y hacer comparaciones simples de int.

$myDateSort = function($obj1, $obj2) {
  $date1 = strtotime($obj1->startTime);
  $date2 = strtotime($obj2->startTime);
  return $date1 - $date2; // if date1 is earlier, this will be negative
}
usort($myArray, $myDateSort);

Respondido 04 Jul 12, 04:07

Gracias por el fragmento de código, desafortunadamente esto no afecta el tipo de mis resultados. Tratando de entender el código, ¿está el usort generando las entradas $obj1, $obj2 para la función? - steven carlton

Un poco... Cuando llamas a usort y le pasas una matriz, llama a tu función varias veces, cada vez que pasa 2 de los objetos en tu matriz. Entonces, $obj1 y $obj2 son instancias de lo que sea que su matriz mantenga como sus valores (creo que su código indica que son instancias de stdClass). Dentro de la función, solo evalúa si el primero es "menor que" el segundo, y si es así, devuelve un int negativo, si no positivo (o cero para el mismo). PHP se encarga de ordenar la matriz en función de llamar a su función para la mayoría de los pares de valores de matriz. - chris trahey

Después de echar un segundo vistazo, pude ordenar y generar mi matriz en el orden correcto. Una nota para los demás si usa el código provisto en la respuesta y los resultados no se ordenan, intente usar usort ($ this-> $ myArray, $ myDateSort); - steven carlton

Gracias por tu ayuda crahey! - steven carlton

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.