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”

  1. peter on December 12th, 2008 15:52

    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.

  2. admin on December 12th, 2008 16:06

    [peter] Zkus to seřadit nejdřív na vybraných datech nejdřív z jednoho a pak z druhého sloupce.

  3. Zajímavé články o WordPressu (v angličtině) « Fórum podpory WordPressu on April 29th, 2011 10:56

    […] Access Denied: Hezky vysvětlené seřazení vícerozměrného pole (v češtině). […]

  4. Peli on July 9th, 2013 15:21

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

  5. Peli on July 9th, 2013 15:33

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

Váš komentář: