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
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.
Example#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) }
Example#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) } }
Example#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
Example#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 )