array_multisort Posortuj wiele tablic lub tablice wielowymiarowe &reftitle.description; boolarray_multisort arrayarray1 mixedarray1_sort_orderSORT_ASC mixedarray1_sort_flagsSORT_REGULAR mixedrest 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 (typu string) są zachowywane, a indeksy numeryczne są przenumerowywane. ¬e.sort-unstable; ¬e.reset-index; &reftitle.parameters; array1 Tablica do posortowania. array1_sort_order Kolejność sortowania dla poprzedniego argumentu tablicy. SORT_ASC aby posortować rosnąco lub SORT_DESC, aby posortować malejąco. Ten argument może byc zamieniony z array1_sort_flags lub całkowicie pominięty - w tym wypadku zakładane jest użycie SORT_ASC. array1_sort_flags Opcje sortowania dla poprzedniego argumentu tablicy: Flagi sortowania: SORT_REGULAR - porównuj elementy normalnie (nie zmieniając typów) SORT_NUMERIC - porównuj elementy numerycznie SORT_STRING - porównuj elementy jak ciągi znaków SORT_LOCALE_STRING - porównuj elementy jak ciągi znaków, z uwzględnieniem ustawień regionalnych (locale). Używane ustawienia regionalne mogą być zmienione funkcją setlocale SORT_NATURAL - porównuj elementy jak ciągi znaków, używając "sortowania naturalnego" tak jak natsort SORT_FLAG_CASE - może być połączona (poprzez bitowe OR) z flagami SORT_STRING lub SORT_NATURAL aby posortować ciągi znaków bez rozróżniania wielkości liter Ten argument może byc zamieniony z array1_sort_order lub całkowicie pominięty - w tym wypadku zakładane jest użycie SORT_REGULAR. rest Więcej tablic, po których mogą następować flagi kolejności i opcji sortowania. Porównywane są tylko elementy odpowiadające elementom w poprzednich tablicach. Innymi słowy, sortowani jest leksykograficzne. &reftitle.returnvalues; &return.success; &reftitle.examples; 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 tablicy wielowymiarowej ]]> 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ć np. wywołując w pętli funkcję mysqli_fetch_assoc. 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 użyjemy kodu poniżej, aby uzyskać kolumny, a następnie przeprowadzić sortowanie. 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); // Pobierz listę kolumn foreach ($dane as $klucz => $wiersz) { $numer[$klucz] = $wiersz['numer']; $edycja[$klucz] = $wiersz['edycja']; } // Możesz użyć array_column() zamiast kodu wyżej $numer = array_column($data, 'numer'); $edycja = array_column($data, '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); // Przeiteruj się po danych i wyświetl posortowane wartości dla każdej z kolumn echo 'numer | edycja', PHP_EOL; echo '------+-------', PHP_EOL; for ($i = 0; $i < count($data); $i++) { printf("%5d | %6d\n", $volume[$i], $edition[$i]); } ?> ]]> Zbiór danych jest teraz posortowany. Wygląda on tak: Sortowanie z ignorowaniem wielkości znaków Zarówno SORT_STRING jak SORT_REGULAR, powodują sortowanie z rozróżnianiem wielkości znaków. Ciągi zaczynające się od dużej litery znajdą się przed 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 ) ]]> &reftitle.seealso; usort &seealso.array.sorting;