Menu
Coddy logo textTech

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.

challenge icon

Desafío

Fácil

Recibirá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);
?>
quiz iconPonte a prueba

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

Practica por tu cuenta: Compilador de PHP online