Programación

Cómo ordenar un array en PHP en base a uno de los valores de cada uno de sus elementos

El otro día un cliente me pidió que los datos de un informe aparecieran ordenados en base al stock. Para poneros en situación se trata de un informe que le exporto en Excel de su stock en una tienda WooCommerce. A priori, lo más sencillo sería hacer la consulta en base al stock, algo así como que al obtener productos WooCommerce me los devuelva ordenados por stock. En este caso, no era posible porque el informe realmente es una recopilación de stocks de no solo una tienda, sino de varias, y la estructura que tengo es un array PHP multidimensional.

Ordenación personalizada de listas en PHP

Así que nada, la solución es sencilla, usar la función usort de PHP, que permite ordenar un array siguiendo un criterio que definimos a nuestra elección. Esta función recibe el array como primer parámetro y lo hace por referencia, así que lo que le pases lo modifica; y un segundo parámetros, que es una función. La función puedes haberla definida aparte o puedes usar una función anónima, que es bastante práctico para este caso.

Así que bueno, teniendo ya la herramienta, vamos a explicar el detalle. Tenemos un array con este formato:

<?php
$datos = array( 
    array( 'sku' => 'XXXXX', 'stock' => 30, 'nombre' => 'Producto X' ...),
    array( 'sku' => 'YYYYY', 'stock' => 10, 'nombre' => 'Producto Y' ...),
    ....
);

Y queremos que se quede ordenado por stock de forma que el elemento 2º de este caso pasara a ser el 1º, porque su stock es menor y queremos tener la lista ordenada de menor a mayor, de forma ascendenten, en base a ese valor.

Pues con usort sería muy sencillo.

<?php
usort( $datos, function( $a, $b ){
    return $a['stock'] - $b['stock'];
} )

Una ordenación alfabética, ya que estamos, sería bien sencilla, usando esta misma lógica:

<?php
usort( $datos, function( $a, $b ){
    return strcmp( $a['nombre'], $b['nombre'] );
} )

Y cualquier otra ordenación que queráis que para eso vosotros definís el método de ordenación.

Nota: Hay una valoración incrustada en esta entrada, por favor, visita esta entrada para valorarla.

Almacenamos las IPs desde la que se envían las valoraciones para evitar fraudes

Francisco Javier Carazo Gil

Compartir
Publicado por
Francisco Javier Carazo Gil
Etiquetas: arrayordenarphp

Entradas recientes

RedSys para Contact Form 7 ahora muestra el justificante y el motivo del rechazo en la página de gracias

Ya está disponible la versión 2.2 de Contact Form 7 – Integración con RedSys, y…

hace % días

¿Qué aporta la integración de Bizum y métodos similares en el proceso de pago?

El comercio electrónico español, que se encuentra en pleno crecimiento y transformación, vive actualmente un…

hace % días

Pagos recurrentes en Contact Form 7: suscripciones con RedSys, paso a paso

Hasta ahora, la integración de Contact Form 7 con RedSys solo sabía cobrar pagos únicos:…

hace % días

Cuotas personalizadas con RedSys

El pago fraccionado de RedSys para WooCommerce lleva un tiempo permitiendo dividir el precio de…

hace % días

Contact Form 7 – Integración con RedSys ya habla catalán, gallego y euskera

Ya está disponible la versión 1.24 de Contact Form 7 - Integración con RedSys, y…

hace % días

Calendario de pagos a medida en WooCommerce Subscriptions: cobra en las fechas que tú decidas

Hasta ahora, cobrar una suscripción en WooCommerce significaba aceptar una regla muy simple: eliges un…

hace % días