Ordenación por orden natural
Parte de la sección Lógica y Flujo del Journey de PHP de Coddy — lección 24 de 68.
Si bien las funciones de ordenación estándar de PHP funcionan bien para la mayoría de los casos, pueden producir resultados inesperados al ordenar cadenas que contienen números. La función natsort() resuelve este problema utilizando un algoritmo de "ordenación natural" que ordena las cadenas de la manera que los humanos esperarían naturalmente.
Considera este ejemplo con nombres de archivos:
<?php
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];
// sort() regular produce: file1.txt, file10.txt, file2.txt, file20.txt
sort($files);
print_r($files);
// Reiniciar el array
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];
// natsort() produce: file1.txt, file2.txt, file10.txt, file20.txt
natsort($files);
print_r($files);
?>La diferencia es crucial: el sort() regular compara cadenas carácter por carácter, por lo que "file10.txt" va antes que "file2.txt" porque "1" va antes que "2" en ASCII. Sin embargo, natsort() reconoce las partes numéricas y las ordena numéricamente, colocando "file2.txt" antes de "file10.txt" como esperarías naturalmente.
Al igual que otras funciones de ordenación de PHP, natsort() modifica el array original directamente. Esto lo hace particularmente útil para organizar listados de archivos, números de versión o cualquier dato donde las cadenas contengan números incrustados que deban ordenarse numéricamente en lugar de alfabéticamente.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Desafío
FácilRecibirás una entrada: un array de números de versión de software en formato JSON. Lee la entrada, convierte la cadena JSON en un array, utiliza natsort() para ordenar los números de versión en orden natural y muestra el array ordenado utilizando print_r().
Formato de entrada: Una línea que contiene un array JSON de cadenas de versión (ejemplo: ["v1.10","v1.2","v1.20","v1.3"])
Resultado esperado: El array ordenado en orden natural, mostrado mediante print_r()
Hoja de referencia
La función natsort() ordena cadenas utilizando el "orden natural", la forma en que los humanos esperan naturalmente que se ordenen las cadenas con números.
El sort() regular compara cadenas carácter por carácter, mientras que natsort() reconoce las porciones numéricas y las ordena numéricamente:
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];
// sort() regular produce: file1.txt, file10.txt, file2.txt, file20.txt
sort($files);
// natsort() produce: file1.txt, file2.txt, file10.txt, file20.txt
natsort($files);
print_r($files);Al igual que otras funciones de ordenación de PHP, natsort() modifica el array original directamente. Es particularmente útil para listados de archivos, números de versión o cualquier dato con números incrustados que deban ordenarse numéricamente.
Pruébalo tú mismo
<?php
// Leer la entrada
$input = fgets(STDIN);
// Convertir la cadena JSON a un array
$versions = (array)json_decode($input, true);
// TODO: Escribe tu código a continuación para ordenar el array usando natsort()
// Mostrar el array ordenado
print_r($versions);
?>Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Funciones avanzadas
Funciones anónimasClosures y 'use'Funciones de flechaFunciones callbackUso de 'call_user_func'Funciones variablesPaso por referenciaFunciones recursivasResumen: Miscelánea de funciones4Arreglos multidimensionales
Crear un arreglo 2DAcceder a elementos de un arreglo 2DModificar elementos de un arreglo 2DIterar con bucles anidadosArreglos asociativos 2DResumen: Ejercicio de cuadrícula simple2Manipulación avanzada de arrays
Agregar con 'array_push'Eliminar con 'array_pop'Agregar con 'array_unshift'Eliminar con 'array_shift'Fusionar arrays indexadosFusionar arrays asociativosExtraer con 'array_slice'Valores con 'in_array'Claves con 'array_search'Resumen: Ejercicio de Playlist3Ordenar Arrays
Ordenar arrays indexados de forma ascendenteOrdenar arrays indexados de forma descendenteOrdenar arrays asociativos por valorOrdenar arrays asociativos por claveOrdenación por orden naturalOrdenación personalizada con 'usort'Resumen: Ordenar tablas de clasificación