Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP

Cómo Ordenar Arreglos en PHP

by
Difficulty:BeginnerLength:LongLanguages:

Spanish (Español) translation by Rene Soto (you can also view the original English article)

Siempre es más fácil obtener una información específica de los datos ordenados, de lo contrario, tendrá que revisar cada elemento del arreglo de uno en uno.Por ejemplo, digamos que ha almacenado el puntaje de diferentes estudiantes en una clase en un arreglo o en una tabla. Si los datos no están ordenados por los puntajes obtenidos, tendrá que mirar el puntaje de cada estudiante en la clase antes de poder saber quién obtuvo el puntaje más alto y más bajo. Si la tabla ya estaba ordenada de baja a alta en base a los puntajes, solo con mirar el puntaje del primer estudiante le diría la calificación más baja.

La clasificación hace que muchas tareas que requieren acceder u obtener un conjunto específico de datos sean muy fáciles y eficientes. En este tutorial, aprenderemos cómo usar las funciones incorporadas de PHP para ordenar diferentes tipos de arreglos.

Ordenar un Arreglo por Valor

Ordenar un arreglo por el valor de sus elementos es muy fácil en PHP. Puede elegir mantener o descartar las asociaciones clave-valor, y también puede definir sus propias funciones para dictar cómo se ordenan los elementos. Te mostraré cómo en esta sección del tutorial.

Puede usar la función sort(&$array, $sort_flags) para ordenar los valores de una arreglo de bajo a alto. Sin embargo, no mantendrá ninguna asociación clave-valor al ordenar la arreglo. Las nuevas claves se asignan a los elementos ordenados en lugar de una simple reordenación. El segundo parámetro opcional le permite especificar cómo deben ordenarse los elementos. Puede tener seis valores diferentes:

  1. SORT_REGULAR: esto ordenará los valores sin cambiar sus tipos.
  2. SORT_NUMERIC: esto ordenará los valores comparándolos numéricamente.
  3. SORT_STRING: esto ordenará los valores comparándolos como cadenas.
  4. SORT_LOCALE_STRING: esto comparará los valores como cadenas basadas en la configuración regional actual. Puede actualizar la configuración regional usted mismo utilizando setlocale ().
  5. SORT_NATURAL: esto ordenará los elementos utilizando el "orden natural" al compararlos como cadenas.
  6. SORT_FLAG_CASE: se puede combinar con SORT_STRING o SORT_NATURAL para desactivar la distinción entre mayúsculas y minúsculas mientras se clasifican las cadenas.

Aquí hay un par de ejemplos de clasificación para ayudarlo a comprender rápidamente la diferencia entre todas las banderas de clasificación.

En el primer ejemplo, la clasificación regular, las cadenas numéricas se convierten a sus valores numéricos, y la clasificación se realiza en consecuencia. La cadena "Apple" no es numérica, por lo que se deja intacta y se compara como una cadena.

En el segundo ejemplo, la ordenación numérica, queremos que los datos se ordenen según el valor numérico, por lo que "Apple" se convierte al valor numérico 0 y aparece primero. El resto de los valores se ordenan como se espera.

En el tercer ejemplo, todos los valores se tratan como cadenas. Esto significa que en lugar de comparar el valor numérico de 123 o 3249832 con 38, se comparan como cadenas, un carácter a la vez. Como "1" aparece antes de "3", el valor 123 se considera menor que 38.

Si desea ordenar los valores de arreglo de alto a bajo en lugar de bajo a alto, puede hacerlo con la ayuda de la función rsort (). Acepta todos los mismos parámetros que sort () pero ordena los valores en orden inverso. Tampoco mantiene ninguna asociación clave-valor, por lo que no es una buena opción para clasificar matrices asociativas.

Ordenar un Arreglo Asociativo

Las asociaciones de valores clave se vuelven importantes cuando se trata de arreglos asociativos. Considere el siguiente ejemplo, donde se usa una arreglo asociativo para almacenar los nombres de diferentes personas y su fruta favorita. Si desea ordenar la lista alfabéticamente por los nombres de la fruta, el uso de la función sort () de la sección anterior resultará en la pérdida de las claves asociadas.

Como puede ver, no solo perdimos la asociación de las personas con su fruta favorita, sino que también perdimos los nombres de las diferentes personas. A cada valor ordenado se le ha asignado un nuevo índice numérico basado en su posición en el arreglo ordenada.

Para ayudarlo a abordar este problema fácilmente, PHP tiene dos funciones diferentes que mantienen la asociación clave-valor mientras clasifican los arreglos por sus valores. Estas dos funciones son asort() y arsort(). El siguiente fragmento de código ordena la misma arreglo $fruit_preferences pero usa asort() para hacerlo.

Como es evidente por el ejemplo anterior, el valor de Apple se mueve a la parte superior mientras mantiene su asociación con Patricia. Los nombres de las frutas se podrían ordenar al revés con la misma facilidad mediante la función arsort().

Ambas funciones aceptan los mismos indicadores de clasificación que el valor de su segundo parámetro opcional como sort() y rsort().

Ordenar Elementos de Arreglo por Valor con Funciones Definidas por el Usuario

Las cuatro funciones de clasificación pueden manejar fácilmente sus necesidades comunes de clasificación con la ayuda de diferentes indicadores. Sin embargo, a veces sus criterios para comparar los elementos del arreglo pueden ser diferentes.

Digamos que tiene una serie de palabras aleatorias que deben ordenarse alfabéticamente. Sin embargo, también desea clasificarlos en función de su longitud antes de clasificarlos alfabéticamente. Por ejemplo, la palabra zoo vendría después de apple en la clasificación alfabética tradicional. Sin embargo, si desea mostrar las palabras cortas antes de las más largas, el zoo aparecerá antes que apple. En el mismo conjunto de letras, la palabra ape vendría antes de zoo debido al orden alfabético.

Básicamente, las palabras se ordenan primero según su longitud, y luego las palabras con el mismo número de letras se ordenan alfabéticamente dentro de su propio grupo. Este tipo de clasificación no está integrado en PHP, por lo que tendremos que escribir nuestra propia función de clasificación.

Lo que hace PHP en este caso es proporcionarle un par de funciones que se pueden usar para pasar la arreglo que desea ordenar, junto con el nombre de su propia función de clasificación.

Puede usar la función usort() para ordenar valores de arreglo en arreglos regulares. De manera similar, puede usar la función uasort() para ordenar los valores en arreglos asociativas y al mismo tiempo mantener las asociaciones clave-valor.

El fragmento de código a continuación muestra una forma de lograr este comportamiento.

En las funciones de devolución de llamada destinadas a la clasificación personalizada, tenemos que devolver un número entero menor que 0 para indicar que el primer valor es más pequeño que el segundo. Devuelve 0 si el primer valor es igual al segundo. Devuelve un entero mayor que 0 si el primer valor es mayor que el segundo.

Como nuestro criterio de clasificación principal era la longitud de la cadena, devolvemos directamente -1 si la primera palabra es más corta que la segunda. De manera similar, devolvemos directamente 1 si la primera palabra es más larga que la segunda. Si las dos palabras tienen la misma longitud, las comparamos alfabéticamente utilizando la función strcmp() y devolvemos su valor.

Como puede ver en la salida, nuestra función de ordenación personalizada reordena las palabras exactamente de la manera que queríamos.

Ordenar un Arreglo por Clave

La clasificación de un arreglo en función de sus claves es generalmente útil cuando se trata de arreglos asociativos.Por ejemplo, puede tener un arreglo con información sobre el número total de aeropuertos en varios países. Suponiendo que los nombres de los diferentes países sean claves y que los números de los aeropuertos sean valores, es posible que desee ordenar los nombres de los países alfabéticamente. Esto es muy fácil de hacer con las funciones ksort() y krsort(). Ambas funciones mantendrán la asociación clave-valor de los elementos del arreglo después de la clasificación. La función ksort() ordena las teclas de bajo a alto, y krsort() ordena las teclas de alto a bajo.

Aquí hay un ejemplo básico de clasificación:

También puede proporcionar a PHP su propia función personalizada para ordenar las claves de arreglo utilizando la función uksort(). Al igual que usort(), la función de devolución de llamada en uksort() también requiere que devuelva un entero menor que 0 si la primera clave se considera menor que la segunda y un entero mayor que 0 si la primera clave es mayor que la segunda. Esta función también mantiene la asociación clave-valor de los elementos del arreglo.

En el ejemplo anterior, hemos utilizado la función de ordenación personalizada de la sección anterior para ordenar los nombres de los países primero por la longitud de su nombre y luego alfabéticamente.

Clasificación de Arreglos Multidimensionales en PHP

Es mucho más común en la vida real tratar con información multidimensional. Por ejemplo, las instituciones almacenarán las marcas de todos los estudiantes en una variedad de temas en una sola tabla en lugar de crear nuevas tablas para cada tema. Si tiene que almacenar la misma información en PHP, también preferiría hacerlo utilizando un arreglo multidimensional en lugar de un arreglo separada para cada tema

En este tutorial, aprenderemos cómo ordenar un arreglo multidimensional utilizando una lista de los edificios más altos del mundo como ejemplo. Nuestro arreglo contendrá información sobre el nombre del edificio, la ciudad y el país donde se ubica, el número de pisos y la altura total en metros, junto con el año en que se construyó.

Cuando quiera ordenar los valores en una arreglo multidimensional basada en un campo particular, simplemente puede usar la función usort(). El siguiente ejemplo debería ayudarte a entender mejor esta técnica.

En el ejemplo anterior, la información sobre cada edificio se almacena en su propio arreglo dentro del arreglo principal $tallest_buildings. La función storey_sort() simplemente resta el número de pisos en el segundo edificio del primero para determinar qué edificio es más pequeño según nuestros criterios. No tenemos que preocuparnos por devolver un valor negativo o positivo específico porque todos los valores negativos significan más pequeños y todos los valores positivos significan más grandes.

Al final, simplemente iteramos a través del arreglo principal e imprimimos información sobre cada edificio.

Conclusiones Finales

En este tutorial, le mostré algunas funciones diferentes en PHP que se pueden usar para ordenar los arreglos por sus claves o sus valores. También aprendimos cómo ordenar una arreglo por sus claves o valores utilizando nuestros propios criterios de clasificación personalizados con la ayuda de las funciones uksort() y uasort(). La sección final discutió cómo ordenar todos los valores en un arreglo multidimensional usando solo un campo específico.

Espero que haya aprendido algo nuevo de este tutorial. Si tiene alguna pregunta o sugerencia, hágamelo saber en los comentarios. La mejor manera de aprender es probar y crear algunos ejemplos propios, clasificando arreglos utilizando estas funciones.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.