array_multisort în PHP

Sortează mai multe tablouri deodată sau un tabel după mai multe coloane.

Sintaxă
array_multisort(&$array, &...$rest): true

Ce face array_multisort

array_multisort sortează primul tablou și mută elementele din celelalte tablouri în aceeași ordine, ca și cum ar fi coloanele unui tabel. Când valorile din primul tablou sunt egale, decide al doilea tablou și așa mai departe.

După fiecare tablou poți da ordinea (SORT_ASC sau SORT_DESC) și tipul comparației (SORT_REGULAR, SORT_NUMERIC, SORT_STRING). Toate tablourile trebuie să aibă același număr de elemente. Cheile numerice sunt renumerotate.

Parametri

Parametru Descriere
$array Primul tablou, după care se sortează. Este modificat direct.
$rest Opțional. Ordinea și tipul sortării, apoi alte tablouri cu ordinea și tipul lor.

Ce returnează

Întotdeauna true.

Exemple

Exemplul 1: Două liste sortate împreună

Vârstele sunt sortate descrescător. La vârste egale, numele sunt ordonate alfabetic.

<?php
$nume = ["Ana", "Mihai", "Ioana", "Radu"];
$varste = [30, 25, 30, 22];

array_multisort($varste, SORT_DESC, $nume, SORT_ASC);

foreach ($nume as $i => $n) {
    echo "$n: {$varste[$i]}\n";
}

Rezultat

Ana: 30
Ioana: 30
Mihai: 25
Radu: 22

Exemplul 2: Rânduri sortate după două coloane

Coloanele extrase cu array_column dau ordinea, iar ultimul tablou, $produse, este rearanjat la fel.

<?php
$produse = [
    ["nume" => "Mouse", "pret" => 80],
    ["nume" => "Cablu", "pret" => 15],
    ["nume" => "Boxe", "pret" => 80],
];

array_multisort(
    array_column($produse, "pret"), SORT_DESC,
    array_column($produse, "nume"), SORT_ASC,
    $produse
);

echo implode(", ", array_column($produse, "nume"));

Rezultat

Boxe, Mouse, Cablu

Greșeli frecvente

  • Tablourile au lungimi diferite. Primești ValueError: Array sizes are inconsistent.
  • Pentru o singură coloană, usort cu operatorul <=> este mai ușor de citit.

Comenzi înrudite

  • sort: Sortează elementele unui tablou crescător. Există și variante pentru descrescător și pentru chei.
  • array_column: Extrage o singură coloană dintr-o listă de rânduri (de exemplu toate numele dintr-o listă de utilizatori).
  • natsort / natcasesort: Sortează un tablou în „ordine naturală”, cum ar ordona un om: img2 înainte de img10.