Cómo ordenar un array de matrices asociativas por el valor de una clave dada en PHP

Minahil Noor 30 enero 2023
  1. Usar la función array_multisort() para ordenar un array de matrices asociativas por el valor de una clave dada en PHP
  2. Usa la función usort() para ordenar un array de matrices asociativas por el valor de una clave dada en PHP
Cómo ordenar un array de matrices asociativas por el valor de una clave dada en PHP

Este artículo introducirá métodos para ordenar un array de matrices asociativas por el valor de una clave dada en PHP.

  • Usando la función array_multisort()
  • Usando la función usort()

Usar la función array_multisort() para ordenar un array de matrices asociativas por el valor de una clave dada en PHP

Podemos usar la función incorporada array_multisort() para ordenar un array de arrays asociativos por el valor de una clave dada. Puede ordenar muchas matrices a la vez o un array multidimensional. La sintaxis correcta para utilizar esta función es la siguiente

str_replace($arrayName, $sort_order, $sort_flags);

La función incorporada array_multisort() tiene tres parámetros. Los detalles de sus parámetros son los siguientes

Parámetros Descripción
$arrayName obligatorio Es la array que queremos clasificar.
$sort_order opcional Nos dice el orden en el que vamos a ordenar nuestra array. Puede ser SORT_ASC para el orden ascendente y SORT_DESC para el orden descendente. Su valor por defecto es SORT_ASC.
$sort_flags opcional Habla de las opciones de clasificación. Puedes leerlo aquí.

Esta función devuelve VERDADERO si tiene éxito. En caso contrario, devuelve FALSO.

El siguiente programa muestra cómo podemos usar la función array_multisort() para ordenar un array de arrays asociativos por el valor de una clave dada.

<?php 
$result = array(

   array("firstname"=>"Olivia", "marks"=>85),
   array("firstname"=>"Jacob", "marks"=>60),
   array("firstname"=>"Henry", "marks"=>100),
   array("firstname"=>"Lili", "marks"=>40),
   array("firstname"=>"Stefan", "marks"=>5),
   array("firstname"=>"Bonnie", "marks"=>97),
);
$marks = array();
foreach ($result as $key => $row)
{
    $marks[$key] = $row['marks'];
    
}
array_multisort($marks, SORT_DESC, $result);
print_r($result);  
?> 

Hemos creado un array $marks que contiene las marcas de la array original. Después de eso, hemos usado la función array_multisort() para ordenar el array $marcas en base a el array $result. La salida será el array $result ordenada.

Resultado:

Array
(
    [0] => Array
        (
            [firstname] => Henry
            [marks] => 100
        )

    [1] => Array
        (
            [firstname] => Bonnie
            [marks] => 97
        )

    [2] => Array
        (
            [firstname] => Olivia
            [marks] => 85
        )

    [3] => Array
        (
            [firstname] => Jacob
            [marks] => 60
        )

    [4] => Array
        (
            [firstname] => Lili
            [marks] => 40
        )

    [5] => Array
        (
            [firstname] => Stefan
            [marks] => 5
        )

)

La array se ordena en orden descendente por el valor de la clave de las marcas.

Usa la función usort() para ordenar un array de matrices asociativas por el valor de una clave dada en PHP

En PHP, también podemos usar la función usort() para ordenar un array de arrays asociativos por el valor de una clave dada. Esta función ordena el array usando una función definida por el usuario. La sintaxis correcta para usar esta función es la siguiente:

preg_replace($arrayName, $functionName);

La función usort() acepta dos parámetros. El detalle de sus parámetros es el siguiente

Parámetros Descripción
$arrayName obligatorio Es la array que queremos clasificar
$functionName obligatorio Es la función definida por el usuario la que clasificará el array pasada.

Devuelve VERDADERO si tiene éxito, FALSO si no. El programa que ordena el array es el siguiente:

<?php 
function DescSort($item1,$item2)
{
    if ($item1['marks'] == $item2['marks']) return 0;
    return ($item1['marks'] < $item2['marks']) ? 1 : -1;
}
$result = array(

   array("firstname"=>"Olivia", "marks"=>85),
   array("firstname"=>"Jacob", "marks"=>60),
   array("firstname"=>"Henry", "marks"=>100),
   array("firstname"=>"Lili", "marks"=>40),
   array("firstname"=>"Stefan", "marks"=>5),
   array("firstname"=>"Bonnie", "marks"=>97),
);
usort($result,'DescSort');
print_r($result);
?> 

Resultado:

Array
(
    [0] => Array
        (
            [firstname] => Henry
            [marks] => 100
        )

    [1] => Array
        (
            [firstname] => Bonnie
            [marks] => 97
        )

    [2] => Array
        (
            [firstname] => Olivia
            [marks] => 85
        )

    [3] => Array
        (
            [firstname] => Jacob
            [marks] => 60
        )

    [4] => Array
        (
            [firstname] => Lili
            [marks] => 40
        )

    [5] => Array
        (
            [firstname] => Stefan
            [marks] => 5
        )

)

Para la ordenación ascendente, la función será:

<?php 
function AscSort($item1,$item2)
{
    if ($item1['marks'] == $item2['marks']) return 0;
    return ($item1['marks'] > $item2['marks']) ? 1 : -1;
}
$result = array(

   array("firstname"=>"Olivia", "marks"=>85),
   array("firstname"=>"Jacob", "marks"=>60),
   array("firstname"=>"Henry", "marks"=>100),
   array("firstname"=>"Lili", "marks"=>40),
   array("firstname"=>"Stefan", "marks"=>5),
   array("firstname"=>"Bonnie", "marks"=>97),
);
usort($result,'AscSort');
print_r($result);
?> 

Resultado:

Array
(
    [0] => Array
        (
            [firstname] => Stefan
            [marks] => 5
        )

    [1] => Array
        (
            [firstname] => Lili
            [marks] => 40
        )

    [2] => Array
        (
            [firstname] => Jacob
            [marks] => 60
        )

    [3] => Array
        (
            [firstname] => Olivia
            [marks] => 85
        )

    [4] => Array
        (
            [firstname] => Bonnie
            [marks] => 97
        )

    [5] => Array
        (
            [firstname] => Henry
            [marks] => 100
        )

)

Artículo relacionado - PHP Array