"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como classificar um array de objetos por data em PHP?

Como classificar um array de objetos por data em PHP?

Publicado em 2024-11-09
Navegar:182

How to Sort an Array of Objects by Date in PHP?

Classificando um array de objetos por data

Em PHP, frequentemente encontramos a necessidade de classificar um array de objetos por uma propriedade específica, como um campo de data. Isso nos permite exibir ou manipular nossos dados em ordem cronológica.

Reorganizando objetos por data

Considere a seguinte matriz de objetos, onde cada objeto representa um registro com um propriedade de data:

$array = [
    495 => (object)['date' => '2009-10-31 18:24:09'],
    582 => (object)['date' => '2010-2-11 12:01:42'],
];

Para classificar esses objetos por sua propriedade de data em ordem crescente (os mais antigos primeiro), podemos utilizar a função strtotime() e a função usort().

Comparação personalizada Função

Para usar usort(), precisamos definir uma função de comparação personalizada que compare dois objetos com base em sua propriedade de data. O código a seguir define uma função que subtrai o carimbo de data/hora (convertido usando strtotime()) da data do primeiro objeto do carimbo de data/hora da data do segundo objeto:

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

Classificando o Array usando usort()

Uma vez que temos nossa função de comparação, podemos chamar usort() no array, passando a função de comparação como o segundo argumento:

usort($array, 'cb');

Exemplo

Usando o array de exemplo anterior, o array classificado resultante seria:

[
    495 => (object)['date' => '2009-10-31 18:24:09'],
    582 => (object)['date' => '2010-2-11 12:01:42'],
]

PHP 5.3 e superior

Para PHP 5.3 e superior, uma função anônima mais simples pode ser usada como função de comparação:

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

Essa abordagem alcança o mesmo resultado de classificação que a anterior.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3