Ordenação por Ordem Natural
Parte da seção Lógica & Fluxo do Journey de PHP da Coddy — lição 24 de 68.
Embora as funções de ordenação padrão do PHP funcionem bem para a maioria dos casos, elas podem produzir resultados inesperados ao ordenar strings que contêm números. A função natsort() resolve esse problema usando um algoritmo de "ordenação natural" que ordena strings da maneira que os humanos naturalmente esperariam.
Considere este exemplo com nomes de arquivos:
<?php
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];
// O sort() regular produz: file1.txt, file10.txt, file2.txt, file20.txt
sort($files);
print_r($files);
// Redefine o array
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];
// natsort() produz: file1.txt, file2.txt, file10.txt, file20.txt
natsort($files);
print_r($files);
?>A diferença é crucial: o sort() regular compara strings caractere por caractere, então "file10.txt" vem antes de "file2.txt" porque "1" vem antes de "2" no ASCII. No entanto, o natsort() reconhece as partes numéricas e as ordena numericamente, colocando "file2.txt" antes de "file10.txt" como você esperaria naturalmente.
Como outras funções de ordenação do PHP, natsort() modifica o array original diretamente. Isso a torna particularmente útil para organizar listagens de arquivos, números de versão ou quaisquer dados onde as strings contenham números incorporados que devem ser ordenados numericamente em vez de alfabeticamente.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Desafio
FácilVocê receberá uma entrada: um array de números de versão de software em formato JSON. Leia a entrada, converta a string JSON em um array, use natsort() para ordenar os números de versão em ordem natural e imprima o array ordenado usando print_r().
Formato de entrada: Uma linha contendo um array JSON de strings de versão (exemplo: ["v1.10","v1.2","v1.20","v1.3"])
Saída esperada: O array ordenado em ordem natural, exibido usando print_r()
Folha de consulta
A função natsort() ordena strings usando "ordenação natural" - a maneira como os humanos naturalmente esperam que strings com números sejam ordenadas.
O sort() regular compara strings caractere por caractere, enquanto o natsort() reconhece partes numéricas e as ordena numericamente:
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];
// O sort() regular produz: file1.txt, file10.txt, file2.txt, file20.txt
sort($files);
// natsort() produz: file1.txt, file2.txt, file10.txt, file20.txt
natsort($files);
print_r($files);Como outras funções de ordenação do PHP, a natsort() modifica o array original diretamente. Ela é particularmente útil para listagens de arquivos, números de versão ou quaisquer dados com números incorporados que devam ser ordenados numericamente.
Experimente você mesmo
<?php
// Ler entrada
$input = fgets(STDIN);
// Converter string JSON para array
$versions = (array)json_decode($input, true);
// TODO: Escreva seu código abaixo para ordenar o array usando natsort()
// Exibir o array ordenado
print_r($versions);
?>Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Funções Avançadas
Funções AnônimasClosures e 'use'Arrow FunctionsFunções de CallbackUsando 'call_user_func'Funções VariáveisPassagem por ReferênciaFunções RecursivasRecapitulação: Mix de Funções4Arrays Multidimensionais
Criando um Array 2DAcessando Elementos de um Array 2DModificando Elementos de um Array 2DIterando com Loops AninhadosArrays Associativos 2DRecapitulação: Exercício de Grade Simples2Manipulações Avançadas de Arrays
Adicionando com 'array_push'Removendo com 'array_pop'Adicionando com 'array_unshift'Removendo com 'array_shift'Mesclando Arrays IndexadosMesclando Arrays AssociativosExtraindo com 'array_slice'Valores com 'in_array'Chaves com 'array_search'Recapitulação: Exercício de Playlist3Ordenação de Arrays
Ordenar Arrays Indexados (Crescente)Ordenar Arrays Indexados (Decrescente)Ordenar Arrays Associativos por ValorOrdenar Arrays Associativos por ChaveOrdenação por Ordem NaturalOrdenação Personalizada com 'usort'Recapitulação: Ordenação de Leaderboard