array_multisort ( array $tbl1 [, $arg [, $... [, array $... ]]] );
Sortuje wiele tablic lub wielowymiarowe tablice, może być użyta do sortowania kilku tablic na raz lub wielowymiarowej tablicy na podstawie jednego z większej liczby wymiarów.
Klucze asocjacyjne są zachowywane, a indeksy numeryczne są przenumerowywane.
Tablice wejściowe są traktowane jak kolumy tablicy, które mają być posortowane wierszami - odpowiada to funkcjonalności warunku SQL ORDER BY. Pierwsza tablica jest tablicą priorytetową do sortowania. Wiersze (wartości) w tej tablicy, które są takie same, sortowane są według następnej tablicy wejściowej i tak dalej.
Struktura argumentów tej funkcji nie jest zwyczajna, ale jest ona elastyczna. Pierwszy argument musi być tablicą. Każdy następny argument musi być tablicą lub flagą oznaczającą porządek sortowania - jeden z poniższych.
Flagi porządku sortowania:
- SORT_ASC - sortuj w porządku rosnącym
- SORT_DESC - sortuj w porządku malejącym
Flagi typu sortowania:
- SORT_REGULAR - porównuj elementy normalnie
- SORT_NUMERIC - porównuj elementy numerycznie
- SORT_STRING - porówuj elementy jak stringi
Nie można podać żadnych dwóch flag tego samego typu dla jednej tablicy. Flagi sortowania podane po argumencie-tablicy dotyczą tylko tej tablicy - są one zerowane do domyślnych wartośći SORT_ASC i SORT_REGULAR po każdym argumencie tablicowym.
Kompatybilność: PHP4, PHP5.
Listing
<?php
$tbl1 = array (10, 100, 100, 0);
$tbl2 = array (1, 3, 2, 4);
array_multisort ($tbl1, $tbl2);
var_dump($tbl1);
var_dump($tbl2);
?>
//W tym przypadku, po sortowaniu, pierwsza tablica będzie zawierać 0, 10, 100, 100, a druga 4, 1, 2, 3. Elementy drugiej tablicy odpowiadające identycznym elementom pierwszej tablicy (100 i 100) także zostały posortowane.
array(4) {
[0]=> int(0)
[1]=> int(10)
[2]=> int(100)
[3]=> int(100)
}
array(4) {
[0]=> int(4)
[1]=> int(1)
[2]=> int(2)
[3]=> int(3)
}
//#2 Sortowanie wielowymiarowych tablic
$tbl = array (
array ("10", 100, 100, "a"),
array (1, 3, "2", 1)
);
array_multisort ($tbl[0], SORT_ASC, SORT_STRING,
$tbl[1], SORT_NUMERIC, SORT_DESC);
var_dump($tbl);
?>
//W tym przykładzie, po posortowaniu, pierwsza tablica przekształci się do postaci "10", 100, 100, 11, "a" (została posortowana jako ciągi znakowe w porządku rosnącym). Druga tablica będzie zawierała elementy 1, 3, "2", 2, 1 (sortowanie liczbowe w porządku malejącym).
array(2) {
[0]=> array(5) {
[0]=> string(2) "10"
[1]=> int(100)
[2]=> int(100)
[3]=> int(11)
[4]=> string(1) "a"
}
[1]=> array(5) {
[0]=> int(1)
[1]=> int(3)
[2]=> string(1) "2"
[3]=> int(2)
[4]=> int(1)
}
}
//#3 Sortowanie wyników zapytań do baz danych
//Dla tego przykładu, każdy element tablicy dane reprezentuje pojedynczy wiersz z tabeli. Ten typ danych jest typowy dla rekordów baz danych.
//Przykładowe dane:
Numer | edycja
-------+--------
67 | 2
86 | 1
85 | 6
98 | 2
86 | 6
67 | 7
//Dane zawarte są w tablicy o nazwie dane. Efekt ten można uzyskać, na przykład, poprzez wywołując w pętli funkcję mysql_fetch_assoc().
<?php
$dane[] = array('numer' => 67, 'edycja' => 2);
$dane[] = array('numer' => 86, 'edycja' => 1);
$dane[] = array('numer' => 85, 'edycja' => 6);
$dane[] = array('numer' => 98, 'edycja' => 2);
$dane[] = array('numer' => 86, 'edycja' => 6);
$dane[] = array('numer' => 67, 'edycja' => 7);
?>
//W tym przykładzie, dane zostaną posortowane według pola numer malejąco, oraz względem pola edycja rosnąco.
//W zmiennej znajduje się tablica wierszy, lecz array_multisort() wymaga tablicy kolumn, tak więc należy zastosować poniższy kod aby uzyskać kolumny, a następnie przeprowadzić sortowanie.
<?php
// Pobierz listę kolumn
foreach ($dane as $klucz => $wiersz) {
$numer[$klucz] = $wiersz['numer'];
$edycja[$klucz] = $wiersz['edycja'];
}
// Posortuj dane według numeru malejąco i edycji rosnąco
// Należy podać $dane jako ostatni parametr aby posortować według wspólnego
// klucza
array_multisort($numer, SORT_DESC, $edycja, SORT_ASC, $dane);
?>
//Zbiór danych jest teraz posortowany. Wygląda on tak:
numer | edycja
------+--------
98 | 2
86 | 1
86 | 6
85 | 6
67 | 2
67 | 7
//#4 Sortowanie z ignorowaniem wielkości znaków
//Obie opcje, SORT_STRING i SORT_REGULAR, powodują sortowanie z rozróżnianiem wielkości znaków. Ciągi zaczynające się od dużej litery staną się ciągami zaczynającymi się od litery małej.
//Aby przeprowadzić sortowanie ignorujące wielkość znaków, należy wymusić, aby porządek sortowania był określany przez kopię oryginalnej tablicy, w której wszystkie znaki zostaną zmienione na małe.
<?php
$tablica = array('Alfa', 'atomowy', 'Beta', 'bank');
$tablica_male = array_map('strtolower', $tablica);
array_multisort($tablica_male, SORT_ASC, SORT_STRING, $tablica);
print_r($tablica);
?>
//Powyższy przykład wyświetli:
Array
(
[0] => Alfa
[1] => atomowy
[2] => bank
[3] => Beta
)
Ranga: Administrator serwisu Punktów: 0