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ă,
usortcu 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.