array_multisort
Sortuje wiele tablic lub wielowymiarowe tablice
Opis
boolarray_multisort
arraytbl1
mixedarg
mixed...
array...
&return.success;
array_multisort 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 tablicą które są takie sane 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.
&return.success;
Sortowanie wielu tablic
]]>
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.
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)
}
]]>
Sortowanie wielowymiarowych tablic
]]>
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(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)
}
}
]]>
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:
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.
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.
$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:
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.
]]>
&example.outputs;
Alfa
[1] => atomowy
[2] => bank
[3] => Beta
)
]]>