Ordenar arrays asociativos por valor
Parte de la sección Lógica y Flujo del Journey de PHP de Coddy — lección 22 de 68.
Al trabajar con arreglos asociativos, a menudo es necesario ordenarlos por sus valores manteniendo las relaciones clave-valor. PHP proporciona dos funciones especializadas para este propósito: asort() para el orden ascendente y arsort() para el orden descendente.
Aquí se muestra cómo funciona asort() para ordenar por valores en orden ascendente:
<?php
$students = [
"Alice" => 85,
"Bob" => 92,
"Charlie" => 78,
"Diana" => 96
];
asort($students);
print_r($students);
// Salida: Array ( [Charlie] => 78 [Alice] => 85 [Bob] => 92 [Diana] => 96 )
?>Observe cómo las calificaciones ahora están organizadas de menor a mayor, pero el nombre de cada estudiante permanece correctamente emparejado con su calificación. Esta es la ventaja clave de asort() sobre el sort() regular—mantiene la asociación entre claves y valores.
Para el orden descendente, arsort() funciona de manera similar pero organiza los valores de mayor a menor:
<?php
arsort($students);
print_r($students);
// Salida: Array ( [Diana] => 96 [Bob] => 92 [Alice] => 85 [Charlie] => 78 )
?>Ambas funciones modifican el array original directamente, al igual que sus contrapartes de arrays indexados. Esto las hace perfectas para organizar datos como calificaciones de estudiantes, precios de productos o cualquier escenario donde necesites ordenar por valor manteniendo intactos los pares clave-valor.
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 asociativo de nombres de empleados y sus salarios en formato JSON. Lee la entrada, convierte la cadena JSON en un array, usa arsort() para ordenar a los empleados por salario en orden descendente (de mayor a menor), y muestra el array ordenado usando print_r().
Formato de entrada: Una línea que contiene un objeto JSON con nombres de empleados como claves y salarios como valores (ejemplo: {"John":45000,"Sarah":52000,"Mike":38000,"Lisa":61000})
Resultado esperado: El array asociativo ordenado en orden descendente por los valores de salario, mostrado usando print_r()
Hoja de referencia
Usa asort() para ordenar arrays asociativos por valores en orden ascendente mientras se preservan las relaciones clave-valor:
<?php
$students = [
"Alice" => 85,
"Bob" => 92,
"Charlie" => 78,
"Diana" => 96
];
asort($students);
print_r($students);
// Salida: Array ( [Charlie] => 78 [Alice] => 85 [Bob] => 92 [Diana] => 96 )
?>Usa arsort() para ordenar arrays asociativos por valores en orden descendente:
<?php
arsort($students);
print_r($students);
// Salida: Array ( [Diana] => 96 [Bob] => 92 [Alice] => 85 [Charlie] => 78 )
?>Ambas funciones modifican el array original directamente y mantienen la asociación entre claves y valores, a diferencia del sort() regular.
Pruébalo tú mismo
<?php
// Leer la entrada
$input = fgets(STDIN);
// Convertir JSON a un array asociativo
$employees = (array)json_decode($input, true);
// TODO: Escribe tu código a continuación para ordenar el array por salario en orden descendente
// Mostrar el array ordenado
print_r($employees);
?>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