Loading:

Książka Zend Framework 3. Poradnik Programisty.

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
)


Ten wpis posiada swój wątek na forum

Wszystkie pytania prosimy kierować właśnie tam ponieważ komentarze to miejsce na poprawki do kodu lub alternatywne rozwiązania i pytania nie będą publikowane

http://forum.funkcje.net/forum/viewtopic.php?f=3&t=121

Dane do logowania na forum są takie same jak na funkcje.net



Dodano przez: divix
Ranga: Administrator serwisu Punktów: 37169
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-17 v.1.5 | design: diviXdesign & rainbowcolors