Jak sortować tablicę w PHP (sorting array PHP)? [funkcje wbudowane i przykładowy kod]

PHP ma kilka predefiniowanych i użytecznych funkcji, które służą do sortowania tablic (array). Za bardzo niczym to nie wyróżnia języka PHP od innych języków programowania, bo praktycznie każdy daje jakieś mechanizmy pozwalające sortować swoje tablice i listy.

Programowanie - ilustracja artykułu
Programowanie - ilustracja artykułu | envato, autor seventyfourimages

Podchodząc do typu array w PHP, trzeba pamiętać, że tablice PHP mają  dużą wszechstronność i są dwa rodzaje wbudowanych tablic:

  • zwykłe tablice jednowymiarowe, indeksowane kolejno klasycznie liczbami całkowitymi od zera,
  • tablice asocjacyjne, które mają swoje klucze, co czyni z nich praktycznie mapami (nazewnictwo takie będzie łatwiej przyswajalne dla osób mających styczność z innymi językami programowania).

Podział na dwa rodzaje tablic,  ma swoje odwzorowanie w funkcjach sortujących, jedne są odpowiednie dla  tablic zwykłych, drugie posortują nam poprawnie tablice asocjacyjne. 

Tablicę można oczywiście posortować rosnąco lub malejąco, PHP dodatkowo radzi sobie z sortowaniem alfabetycznym i numerycznym. Mamy też możliwość przekazania swojej funkcji porównującą elementy tablicy. Dzięki funkcji porównującej elementy tablicy z łatwością posortujemy w PHP tablice wielowymiarowe, według wybranego klucza.

Warto również wspomnieć na początku, że funkcje sortujące przyjmują tablice poprzez referencje, czyli działają na oryginalnych danych. Tablica podana jako zmienna do funkcji już staje się posortowana, nie przekazujemy jej przez wartość zwracaną z funkcji. Jeżeli popełnimy taki błąd, to zmienna otrzyma wartość true, jako wynik powiedzenia się sortowania tablicy (rzadziej false, gdyby sortowanie się nie powiodło), a nie całą tablicę z danymi.

Funkcje sortujące tablice w PHP

sort() – dzięki tej funkcji posortujesz zwykłe tablice (nie asocjacyjne, czyli bez klucza) w kolejności alfabetycznej od najniższej wartości do najwyższej wartości.  Funkcja sort() przyjmuje jeden parametr, czyli tablicę (array), i trzeba pamiętać, że wymaga, aby przekazywany parametr był typu array, w przeciwnym przypadku zgłosi błąd „PHP Warning:  sort() expects parameter 1 to be array, string given in…” Pamiętaj również, żeby nie sortować tablicy asocjacyjnej funkcją array, bo sort() nie zgłosi błędu, ale pozbędzie się Twoich kluczy, sortując tablicę, ale wartości przypisując co kluczy liczbowych zaczynających się od zera. Rzadko, ale czasami taka konwersja może przydać się w Twoich aplikacjach.

Przykładowy kod sortowania za pomocą funkcji sort() znajdziesz poniżej

<?php
 $dogBreeds = array("bocker", "afador", "akbash", "mastador");
 sort($dogBreeds );
 foreach ($dogBreeds  as $item) {
     echo $item ."\n";
 }
?>

rsort() - sortuje zwykłe tablice (nie asocjacyjne) w odwróconej kolejnośc

asort()  - jeżeli chcesz posortować tablice asocjacyjne, zachowując przy tym przypisanie wartości  do kluczy, to funkcja ta jest zdecydowanie dla Ciebie. asort() posortuję tablicę po wartościach od najmniejszej do największej, zachowując przy tym przypisanie do pierwotnych kluczy.

<?php
 
$dogBreeds = array(
"mom dog" => "bocker",
"dad dog" => "afador",
"my dog" =>  "akbash", 
"sister dog" =>  "mastador" );
sort($dogBreeds );

foreach ($dogBreeds  as $key => $value) {
     echo $key . ‘ ’ . $value."\n";
 }
 
?> ​

arsort() – to funkcja działająca jak asort() , tylko sortuje tablicę od wartości największych do najmniejszych.

ksort() – czasami chcemy posortować naszą tablicę asocjacyjną według kluczy i ksort() sprawdzi się tutaj doskonale.

uasort() – funkcja ta przyjmuje jako drugi parametr nazwę naszej funkcji sortującej (polecamy używanie tutaj funkcji anonimowej). Dzięki temu rozwiązaniu możemy sortować tablice wielowymiarowe, sortować tablicę po jednym z kluczy, czy nawet sortować tablice po wartościach obiektów trzymanych w zmiennych tablicy. W logice funkcji sortujących znakomicie odnajduje się, wprowadzony w PHP 7, operator Spaceship. Callback, czyli funkcja sortująca wymaga zwracania trzech wyników, 0, kiedy dwie porównywane wartości są równe ($a==$b), -1 kiedy  $a jest mniejsze niż $b oraz jeden, kiedy $b jest mniejsze niż $a. Operator spaceship skraca cały zapis. 

<?php

$members = [

["first_name" => "Tom", "last_name" => "Land"],
["first_name" => "Daniel", "last_name" => "Nowak"],
["first_name" => "Jakub", "last_name" => "Kowalski"],

];

usort($members, function($a, $b) {


return $a["last_name"] <=> $b["last_name"];



});
Warte przeczytania: