Jak v PHP třídit vícerozměrné pole

Odesláno v August 11, 2005 | Kategorie PHP | 3 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.


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

echo '<pre>';
print_r($data);

?>

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.

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, zneuž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.

Hlasujte pro tento článek:
  • Bookmarky.cz
  • Digg
  • del.icio.us
  • Google
  • Linkuj
  • Vybrali.sme
  • E-mail this story to a friend!
  • Facebook
  • LinkedIn

Komentáře

3 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ě). [...]

Váš komentář: