PHP kézikönyv
Előző |  | Következő

# array_multisort

(PHP 4, PHP 5)

array_multisort -- Egyszerre több tömböt vagy egy többdimenziós tömböt rendez

## Leírás

bool array_multisort ( array ar1 [, mixed arg [, mixed ... [, array ...]]] )

Siker esetén `TRUE` értékkel tér vissza, ellenkező esetben `FALSE` értéket ad.

Az array_multisort() arra használható, hogy egyszerre több tömböt vagy egy többdimenzós tömböt rendezzen sorba egy vagy dimenziója szerint.

Az asszociatív (string) kulcsokat megőrzi a rendezés során, a numerikus indexeket újraindexeli.

A megadott tömböket egy képzeletbeli, sorok alapján rendezendő táblázat oszlopainak tekinthetők. Ez hasonlít az SQL ORDER BY cikkelyének feladatára. Ez első tömb, ami alapján először rendez. Az ebben a tömbben levő ugyanolyan sorok (elemek) a soron következő tömb szerint lesznek tovább rendezve, és így tovább végig a tömbökön.

Ennek a függvénynek a argumentumlistája kicsit szokatlan, de nagyon rugalmas. A legelső paraméternek mindig tömbnek kell lennie, ezután minden paraméter lehet egy tömb vagy egy a következő rendezést szabályzó jelzőértékek közül.

Sorrendi jelzők:

- `SORT_ASC` - növekvő sorrendbe rendez

- `SORT_DESC` - csökkenő sorrendbe rendez

Rendezési jelzők:

- `SORT_REGULAR` - megszokott módon hasonlítja össze az elemeket

- `SORT_NUMERIC` - számként hasonlítja össze az elemeket

- `SORT_STRING` - szövegként hasonlítja össze az elemeket

Nem lehet két ugyanolyan típusú jelzőt egymás után megadni. Ezek a jelzők csak a közvetlenül előttük álló tömb szerinti rendezést befolyásolják, minden tömb paraméternél az alapértelmezés lép életbe: `SORT_ASC` és `SORT_REGULAR`.

Példa 1. Több tömb alapján történő rendezés

`<?php $ar1 = array("10", 100, 100, "a"); $ar2 = array(1, 3, "2", 1); array_multisort($ar1, $ar2); var_dump($ar1); var_dump($ar2); ?>`

A rendezés után az első tömb tartalma "10", "a", 100, 100, a másodiké 1, 1, "2", 3. A második tömb elemei az első tömb megegyező elemeinek megfelelően (100, 100) szintén rendezettek.

    array(4) {
      [0]=> string(2) "10"
      [1]=> string(1) "a"
      [2]=> int(100)
      [3]=> int(100)
    }
    array(4) {
      [0]=> int(1)
      [1]=> int(1)
      [2]=> string(1) "2"
      [3]=> int(3)
    }

Példa 2. Többdimenziós tömbök rendezése

`<?php $ar = array( array("10", 11, 100, 100, "a"), array( 1, 2, "2", 3, 1) ); array_multisort($ar[0], SORT_ASC, SORT_STRING, $ar[1], SORT_NUMERIC, SORT_DESC); var_dump($ar); ?>`

Ebben a példában a rendezés után az első tömb "10", 100, 100, 11, "a" (stringekként lett növekvő sorrendbe rendezve). A második tartalma 1, 3, "2", 2, 1 (számokként rendezve csökkenő sorrendbe).

    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)
      }
    }

Példa 3. Adatbázis eredményhalmazok rendezése

Ebben a példában minden data tömbbeli elem egy táblabeli sornak felel meg.

Példa adat:

    volume | edition
    -------+--------
        67 |       2
        86 |       1
        85 |       6
        98 |       2
        86 |       6
        67 |       7

Az adat egy tömb, melynek neve data. Ez például a mysql_fetch_assoc() függvény ciklusban való hívásával kapható meg.

`<?php $data[] = array('volume' => 67, 'edition' => 2); $data[] = array('volume' => 86, 'edition' => 1); $data[] = array('volume' => 85, 'edition' => 6); $data[] = array('volume' => 98, 'edition' => 2); $data[] = array('volume' => 86, 'edition' => 6); $data[] = array('volume' => 67, 'edition' => 7); ?>`

Ebben a példában volume szerint csökkenőleg, edition szerint növekvőleg rendezünk.

Van egy tömbünk a sorokról, de a array_multisort() oszlopokból álló tömböt vár, ezért a következő kódot használjuk, hogy megkapjuk az oszlopokat, majd elvégezzük a rendezést.

`<?php // Oszlopok előállítása foreach ($data as $key => $row) { $volume[$key] = $row['volume']; $edition[$key] = $row['edition']; } // Rendezzük volume szerint csökkenőleg, majd edition szerint növekvőleg. // A $data tömb az utolsó paraméter, hogy a közös kulcs alapján rendezzen. array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data); ?>`

Az adathalmaz a rendezés után így néz ki:

    volume | edition
    -------+--------
        98 |       2
        86 |       1
        86 |       6
        85 |       6
        67 |       2
        67 |       7

Példa 4. Kis- és nagybetűk egyenlőek

Mind a `SORT_STRING` mind a `SORT_REGULAR` esetén különbséget tesz a kis- és nagybetűk között, a nagybetűvel kezdődő stringek kisebbek mint a kisbetűvel kezdődőek.

Ha azt akarod, hogy a rendezés ne tegyen különbséget a kis- és nagybetűk között, a rendezést a kisbetűssé alakított tömb szerint végezd.

`<?php $array = array('Alpha', 'atomic', 'Beta', 'bank'); $array_lowercase = array_map('strtolower', $array); array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $array); print_r($array); ?>`

A fenti példa a következő kimenetet adja:

    Array
    (
        [0] => Alpha
        [1] => atomic
        [2] => bank
        [3] => Beta
    )

Előző | Tartalom | Következő
array_merge | Fel | array_pad