Ordenar una matriz de objetos por fecha
En PHP, a menudo nos encontramos con la necesidad de ordenar una matriz de objetos por una propiedad específica, como un campo de fecha. Esto nos permite mostrar o manipular nuestros datos en orden cronológico.
Reorganizar objetos por fecha
Considere la siguiente matriz de objetos, donde cada objeto representa un registro con un propiedad de fecha:
$array = [
495 => (object)['date' => '2009-10-31 18:24:09'],
582 => (object)['date' => '2010-2-11 12:01:42'],
];
Para ordenar estos objetos por su propiedad de fecha en orden ascendente (los más antiguos primero), podemos utilizar la función strtotime() y la función usort().
Comparación personalizada Función
Para usar usort(), necesitamos definir una función de comparación personalizada que compare dos objetos según su propiedad de fecha. El siguiente código define una función que resta la marca de tiempo (convertida usando strtotime()) de la fecha del primer objeto de la marca de tiempo de la fecha del segundo objeto:
function cb($a, $b) {
return strtotime($a['date']) - strtotime($b['date']);
}
Ordenar la matriz usando usort()
Una vez que tengamos nuestra función de comparación, podemos llamar a usort() en la matriz, pasando la función de comparación como segundo argumento:
usort($array, 'cb');
Ejemplo
Usando la matriz de ejemplo anterior, la matriz ordenada resultante sería:
[
495 => (object)['date' => '2009-10-31 18:24:09'],
582 => (object)['date' => '2010-2-11 12:01:42'],
]
PHP 5.3 y superior
Para PHP 5.3 y superior, se puede utilizar una función anónima más simple como función de comparación:
usort($array, function($a, $b) {
return strtotime($a['date']) - strtotime($b['date']);
});
Este enfoque logra el mismo resultado de clasificación que el anterior.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3