¿Cómo ordenar una array de arrays asociativas por valor de una clave dada en PHP?

Cada entrada en la array asociativa se caracteriza por un par clave-valor único. Una array puede contener tipos de datos singulares pertenecientes a variables u otras arrays como sus elementos. Hay varias formas de ordenar una array de arrays asociativas por el valor de una clave específica. 

Enfoque 1: Usar el método array_multisort()

El método array_multisort() se usa para devolver una array ordenada. Las claves de string se mantendrán, pero las claves numéricas se vuelven a indexar y comienzan en 0 y aumentan en 1. Esta función puede ordenar varias arrays a la vez o una array multidimensional. 

array_multisort(array, sort_order, sort_type);

Ejemplo: en este enfoque, inicialmente se define una array de arrays asociativas. Luego, se crea una nueva array para almacenar las claves como el atributo de la array principal sobre la que deseamos ordenar. Luego, se aplica el método array_multisort() a esta array creada y al tipo de clasificación deseado. En caso de que dos o más claves sean iguales, los valores aparecen en el orden de almacenamiento. 

PHP

<?php 
 #declaring an associative array
$arr = array(
   array("Name"=>"YASHIKA", "marks"=>22),
   array("Name"=>"ASHIKA", "marks"=>67),
   array("Name"=>"BASHIKA", "marks"=>87),
   array("Name"=>"YASHITA", "marks"=>24),
   array("Name"=>"AMAN", "marks"=>55),
   array("Name"=>"ANjali", "marks"=>98),
   array("Name"=>"YASHIKA", "marks"=>100),   
);
#declaring an array to store names
$names = array();
#iterating over the arr
foreach ($arr as $key => $val)
{
  #storing the key of the names array as the Name key of the arr
    $names[$key] = $val['Name'];
      
}
#apply multisort method
array_multisort($names, SORT_ASC, $arr);
print_r("Modified Array : ");
print_r($arr);  
?>

Producción:

Modified Array : Array
(
    [0] => Array
        (
            [Name] => AMAN
            [marks] => 55
        )

    [1] => Array
        (
            [Name] => ANjali
            [marks] => 98
        )

    [2] => Array
        (
            [Name] => ASHIKA
            [marks] => 67
        )

    [3] => Array
        (
            [Name] => BASHIKA
            [marks] => 87
        )

    [4] => Array
        (
            [Name] => YASHIKA
            [marks] => 22
        )

    [5] => Array
        (
            [Name] => YASHIKA
            [marks] => 100
        )

    [6] => Array
        (
            [Name] => YASHITA
            [marks] => 24
        )
)

Explicación: la array principal se ordena según los nombres en orden ascendente. 

Enfoque 2: Usar el método usort()

Este método ordena la array dada usando una función de comparación definida por el usuario. La función definida por el usuario debe devolver un número entero <, = o > que 0 si el primer argumento es <, = o > que el segundo argumento. Este método asigna nuevas claves a los elementos de la array. Simplemente elimina las claves existentes que pueden haber sido asignadas, en lugar de simplemente reordenar las claves.

usort(array, user_def_func)

Ejemplo:

PHP

<?php 
#sort in descending order
function DescSort($val1,$val2)
{
  #check if both the values are equal
    if ($val1['marks'] == $val2['marks']) return 0;
  #check if not equal, then compare values
    return ($val1['marks'] < $val2['marks']) ? 1 : -1;
}
#declaring an associative array
$arr = array(
   array("Name"=>"YASHIKA", "marks"=>22),
   array("Name"=>"ASHIKA", "marks"=>67),
   array("Name"=>"BASHIKA", "marks"=>87),
   array("Name"=>"YASHITA", "marks"=>24),
   array("Name"=>"AMAN", "marks"=>55),
   array("Name"=>"ANjali", "marks"=>98),
   array("Name"=>"YASHIKA", "marks"=>100),   
);
#apply usort method on the array
usort($arr,'DescSort');
print_r("Modified Array : ");
print_r($arr);
?>

Salida: El método DescSort() ordena las marcas en orden descendente. 

Modified Array : Array
(
    [0] => Array
        (
            [Name] => YASHIKA
            [marks] => 100
        )

    [1] => Array
        (
            [Name] => ANjali
            [marks] => 98
        )

    [2] => Array
        (
            [Name] => BASHIKA
            [marks] => 87
        )

    [3] => Array
        (
            [Name] => ASHIKA
            [marks] => 67
        )

    [4] => Array
        (
            [Name] => AMAN
            [marks] => 55
        )

    [5] => Array
        (
            [Name] => YASHITA
            [marks] => 24
        )

    [6] => Array
        (
            [Name] => YASHIKA
            [marks] => 22
        )
)

Publicación traducida automáticamente

Artículo escrito por mallikagupta90 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *