Como ordenar uma array de arrays associativas pelo valor de uma dada chave em PHP

Minahil Noor 30 janeiro 2023
  1. Utilize array_multisort() Função para ordenar uma array de arrays associativas pelo valor de uma dada chave em PHP
  2. Utilize a função usort() para ordenar uma array de arrays associativas pelo valor de uma determinada chave em PHP
Como ordenar uma array de arrays associativas pelo valor de uma dada chave em PHP

Este artigo introduzirá métodos para ordenar uma array de arrays associativas pelo valor de uma dada chave em PHP.

  • Utilizando a função array_multisort().
  • Utilizando a função usort()

Utilize array_multisort() Função para ordenar uma array de arrays associativas pelo valor de uma dada chave em PHP

Podemos utilizar a função integrada array_multisort() para ordenar um array de arrays associativas pelo valor de uma determinada chave. Ela pode ordenar muitas arrays de uma vez ou uma array multidimensional. A sintaxe correta para utilizar esta função é a seguinte

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

A função integrada array_multisort() tem três parâmetros. Os detalhes de seus parâmetros são os seguintes

Parâmetros Descrição
$arrayName obrigatório É a confusão que queremos classificar.
$sort_order opcional Ela especifica a ordem na qual ordenaremos nossa array. Pode ser SORT_ASC para ordem ascendente e SORT_DESC para ordem descendente. Seu valor padrão é SORT_ASC.
$sort_flags opcional Ela especifica as opções de classificação. Você pode lê-lo aqui.

Esta função retorna VERDADEIRA se for bem sucedida. Caso contrário, ela retorna FALSO.

O programa abaixo mostra como podemos utilizar a função array_multisort() para ordenar um array de arrays associativas pelo valor de uma determinada chave.

<?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);  
?> 

Criamos um array $marks contendo as marcas do array original. Depois disso, utilizamos a função array_multisort() para ordenar o array $marks com base no array $result. A saída será o array $result ordenado.

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
        )

)

O array é ordenado em ordem decrescente pelo valor da chave mark.

Utilize a função usort() para ordenar uma array de arrays associativas pelo valor de uma determinada chave em PHP

Em PHP, também podemos utilizar a função usort() para classificar uma série de arrays associativas pelo valor de uma determinada chave. Esta função ordena o array utilizando uma função definida pelo usuário. A sintaxe correta para utilizar esta função é a seguinte:

preg_replace($arrayName, $functionName);

A função usort() aceita dois parâmetros. O detalhe de seus parâmetros é o seguinte

Parâmetros Descrição
$arrayName obrigatório É a array que queremos classificar
$functionName obrigatório É a função definida pelo usuário que irá classificar a array passada.

Ela retorna VERDADEIRO se for bem sucedida, FALSO caso contrário. O programa que ordena o array é o seguinte:

<?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 ordenação ascendente, a função 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
        )

)

Artigo relacionado - PHP Array