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 tus necesidades específicas, la función usort() ofrece la máxima flexibilidad, ya que te permite definir exactamente cómo deben compararse y ordenarse los elementos. Esta función recibe tu matriz y una función de comparación personalizada que escribes para determinar la lógica de ordenación.
La función de comparación recibe dos elementos de la matriz y debe devolver un 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 comparison 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 sorted.
Al igual que otras funciones de ordenación de PHP, usort() modifica directamente el array original. Esta potente función abre posibilidades para ordenar según cualquier criterio que puedas imaginar, ya sea la longitud de una cadena, una lógica empresarial personalizada o comparaciones complejas de varios campos.
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, usa usort() con tu función de comparación para ordenar el array e imprime 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])
Salida esperada: El array ordenado en orden ascendente por precio, mostrado usando print_r()
Pruébalo tú mismo
<?php
// Leer la entrada
$input = fgets(STDIN);
$prices = json_decode($input, true);
// TODO: Crea una función de comparación y usa usort() para ordenar el array
// Mostrar el array 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ónPractica por tu cuenta: Compilador de PHP online