Loading:


    array_multisort()

    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.



    Napisz Artyku³

    Listing

    //#1 Sortowanie wielu tablic
    <?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
    )




    Dodano przez: divix
    Ranga: Administrator serwisu Punktów: 0
    Komentarze użytkowników
      • Tre¶æ komentarza
        Kod do komentarza (opcjonalnie)
        PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
        Autor
        Token
        token

         

         








    funkcje.net
    Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-2025 v.1.5 | design: diviXdesign & rainbowcolors