Ordenar matriz de objetos por campo de fecha

2 minutos de lectura

¿Cómo puedo reorganizar una matriz de objetos como este:

 [495] => stdClass Object
        (
         2022 => 2009-10-31 18:24:09
         ...
        )
 [582] => stdClass Object
        (
         2022 => 2010-2-11 12:01:42
         ...
        )
 ...

por el date clave, el más antiguo primero?

usort($array, function($a, $b) {
    return strtotime($a['date']) - strtotime($b['date']);
});

O si no tienes PHP 5.3:

function cb($a, $b) {
    return strtotime($a['date']) - strtotime($b['date']);
}
usort($array, 'cb');

  • Se ve bien, y recomendaría al OP que haga la clasificación de fecha/hora en la base de datos, y/o devuelva una marca de tiempo de Unix simple junto con el valor formateado, ya que strtotime() tiene una sobrecarga CONSIDERABLE y haría que la clasificación repetida fuera muy costosa .

    – Marc B.

    19/08/2011 a las 21:50


  • reemplazar usort por uasort entonces

    –Arnaud Le Blanc

    19 de agosto de 2011 a las 22:06

quería ampliar arnaud576875la respuesta Me encontré con este mismo problema, pero con el uso Fecha y hora objetos. Así es como pude lograr lo mismo.

usort($array, function($a, $b) {
    return $a['date']->format('U') - $b['date']->format('U');
});

  • ¿Estás llamando a la format() método en un valor de cadena? Esta respuesta se siente engañosa para los investigadores. Los datos de muestra del OP son una matriz de objetos, no una matriz de matrices.

    – mickmackusa

    15 de abril de 2021 a las 12:06


avatar de usuario
naqued

Quería extenderme sobre arnaud576875 y Michael Irigoyen.

Mismo problema con el objeto que contiene dateTime con Symphony.

No pude usar $a[‘date’] porque no era una matriz clave.

usort($verifications, function($a, $b) {
   return $a->getDate()->format('U') - $b->getDate()->format('U');
});

esto soluciono mi problema

  • ¿Estás llamando a la format() método en un valor de cadena? Esta respuesta se siente engañosa para los investigadores. Los datos de muestra del OP son una matriz de objetos, no una matriz de matrices.

    – mickmackusa

    15 de abril de 2021 a las 12:06


avatar de usuario
shjiemon

Al trabajar con objetos DateTime como propiedades de su Entidad, esto funcionó para mí:

$myArray = $entityRepository->findAll();

usort($myArray, function($a, $b) {
    return $a->getDate()->getTimestamp() - $b->getDate()->getTimestamp();
        });

  • Su respuesta podría mejorarse con información de apoyo adicional. Edite para agregar más detalles, como citas o documentación, para que otros puedan confirmar que su respuesta es correcta. Puede encontrar más información sobre cómo escribir buenas respuestas en el centro de ayuda.

    – Comunidad
    Bot

    3 de diciembre de 2021 a las 23:34

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad