Ordenación personalizada con 'usort'
Parte de la sección Lógica y Flujo del Journey de PHP de Coddy — lección 25 de 68.
Cuando las funciones de ordenación integradas de PHP no satisfacen sus necesidades específicas, la función usort() proporciona la máxima flexibilidad al permitirle definir exactamente cómo deben compararse y ordenarse los elementos. Esta función toma su array y una función de comparación personalizada que usted escribe para determinar la lógica de ordenación.
La función de comparación recibe dos elementos del array y debe devolver un número entero: un número negativo si el primer elemento debe ir antes que el segundo, cero si son iguales, o un número positivo si el primero debe ir después del segundo.
<?php
function compareByLength($a, $b) {
return strlen($a) - strlen($b);
}
$words = ["elephant", "cat", "butterfly", "dog"];
usort($words, "compareByLength");
print_r($words);
// Salida: Array ( [0] => cat [1] => dog [2] => elephant [3] => butterfly )
?>En este ejemplo, la función de comparación calcula la diferencia entre las longitudes de las cadenas. Cuando strlen($a) - strlen($b) devuelve un número negativo, significa que la primera cadena es más corta y debe aparecer primero en el array ordenado.
Al igual que otras funciones de ordenación de PHP, usort() modifica el array original directamente. Esta potente función abre posibilidades para ordenar por cualquier criterio que puedas imaginar—ya sea la longitud de la cadena, lógica de negocio personalizada o comparaciones complejas de múltiples campos.
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 precios de productos en formato JSON. Lee la entrada, convierte la cadena JSON en un array, crea una función de comparación que ordene los precios en orden ascendente, utiliza usort() con tu función de comparación para ordenar el array y muestra el array ordenado usando print_r().
Formato de entrada: Una línea que contiene un array JSON de números (ejemplo: [29.99,15.50,42.00,8.75,33.25])
Resultado esperado: El array ordenado en orden ascendente por precio, mostrado usando print_r()
Hoja de referencia
La función usort() permite una ordenación personalizada al aceptar una función de comparación que define la lógica de ordenación.
La función de comparación recibe dos elementos y debe devolver:
- Número negativo: el primer elemento va antes que el segundo
- Cero: los elementos son iguales
- Número positivo: el primer elemento va después del segundo
<?php
function compareByLength($a, $b) {
return strlen($a) - strlen($b);
}
$words = ["elephant", "cat", "butterfly", "dog"];
usort($words, "compareByLength");
print_r($words);
// Salida: Array ( [0] => cat [1] => dog [2] => elephant [3] => butterfly )
?>Al igual que otras funciones de ordenación de PHP, usort() modifica el array original directamente.
Pruébalo tú mismo
<?php
// Leer la entrada
$input = fgets(STDIN);
$prices = json_decode($input, true);
// TODO: Crear una función de comparación y usar usort() para ordenar el arreglo
// Mostrar el arreglo ordenado
print_r($prices);
?>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