Jak v PHP třídit vícerozměrné pole
Odesláno v August 11, 2005 | Kategorie PHP | 5 Comments
Jednoduchá situace:
potřebujete setřídit vícerozměrné pole vrácené třeba z databáze podle zadaného sloupce. Použijeme array_multisort. Definice v manuálu k PHP je poměrně krkolomná, proto se pokusím o vlastní popis a jednoduchý příklad.
Funkce array_multisort seřadí prvky druhého pole podle prvků v prvním poli. Tedy pokud bude v prvním poli prvek přesunut na druhé místo, bez ohledu na obsah bude prvek ve druhém poli přesunut také na druhé místo.
$data['0']['name']= 'Google';
$data['0']['url'] = 'http://www.google.com';
$data['1']['name']= 'Internet Goodies Page';
$data['1']['url'] = 'http://goodies.euweb.cz';
$data['2']['name']= 'Full Web Building Tutorials';
$data['2']['url'] = 'http://www.w3schools.com';
$data['3']['name']= 'World Wide Web Consortium';
$data['3']['url'] = 'http://www.w3.org';
foreach ($data as $val) {
$sortarray[] = $val['name'];
}
array_multisort($sortarray,$data);
print_r($data);
Funguje to asi takhle: Nejprve si připravíme pole, podle kterého budeme řadit tak, že vybereme pole s daným indexem (name) a to pak použjeme jako ‘řadící’. Má stejnou délku, pouze má jen jeden rozměr. Jako druhé, řazené pole, použijeme už existující $data.
Array_multisort má další nepovinné parametry:
- SORT_REGULAR – Compare items normally
- SORT_NUMERIC – Compare items numerically
- SORT_STRING – Compare items as strings
- SORT_ASC – Sort in ascending order
- SORT_DESC – Sort in descending order
A zbytek si nastudujte sami.
Komentáře
5 Responses to “Jak v PHP třídit vícerozměrné pole”
Váš komentář:
To je sice fajn, to si muze najit kazdy na
cz.php.net/array_multisort
ALE, co kdyz chci radit podle vice indexu/klicu?
Mam tabulku Id, Jmeno, Prijmeni, Body a chci to seradit jednou podle prijmeni a jmeno; a podruhe podle body a prijmeni :)
To uz jaksi nepopisujes a prijde mi to dulezitejsi nez tento priklad.
[peter] Zkus to seřadit nejdřív na vybraných datech nejdřív z jednoho a pak z druhého sloupce.
[…] Access Denied: Hezky vysvětlené seřazení vícerozměrného pole (v češtině). […]
díky, ale nemáte tam chybu? nejdřív patří POLE, KTERÉ chci seřadit a až pak se dávají pole, podle kterých řadit.
Imho to má být:
array_multisort($data,$sortarray);
tím je možné potom řadit podle více klíčů, třeba:
array_multisort($data,$razeni1,$razeni2,$razeni3);
hmmm, tak je to v pořádku, omlouvám se, máte to dobře. A řazení podle více klíčů by mohlo být třeba takto:
array_multisort($sortarray,SORT_LOCALE_STRING,SORT_DESC,$sortarray2,SORT_LOCALE_STRING,SORT_ASC,$pole_surovin_komplet);