Metoda pro řazení pole podle (nejen) české abecedy

PHP Ostatní Metoda pro řazení pole podle (nejen) české abecedy

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Dříve či později každý narazí na potřebu řazení pole podle abecedy. Bohužel, funkce sort(), která pracuje s UTF tabulkou, si neporadí se znaky jako je Č, Š, Ř apod.

$pole = ('Klára', 'Zuzana', 'Řehoř', 'Chroust', 'Čeněk', 'Adam', 'Ondřej');
sort($pole);
print_r($pole);

V UTF tabulce jsou až za písmenem Z, proto se Šárka zařadí až za Zuzanu. Výsledek výše psaného kódu by byl:

Array ( [0] => Adam [1] => Chroust [2] => Klára [3] => Ondřej [4] => Zuzana [5] => Čeněk [6] => Řehoř )

Na různých fórech jsem nacházel více či méně funkční nahrazení funkce sort(), ale žádné se mi nezdálo dostatečně flexibilní. Třída SortUTF obsahuje metodu sort(), která svůj účel plní - troufám si říct - na 100%. Předávanými parametry jsou pole $array, které chcete seřadit, a dva nepovinné parametry $useCh a $chars, kterým se budu věnovat níže.

Metodu jednoduše voláte SortUTF::sort($a­rray):

$pole = array('Klára', 'Zuzana', 'Řehoř', 'Chroust', 'Čeněk', 'Adam', 'Ondřej');
$pole = SortUTF::sort($pole);
print_r($pole);

Výsledek:

Array ( [0] => Adam [1] => Chroust [2] => Čeněk [3] => Klára [4] => Ondřej [5] => Řehoř [6] => Zuzana )

To už není špatné, ovšem oku pozorného češtináře jistě neunikne Chroust, který by měl být až za Čeňkem. Tím se dostávám ke druhému parametru funkce, tedy $useCh. Jak název napovídá, při předání hodnoty true bude metoda brát v úvahu CH jako jedno písmeno.

$pole = array('Klára', 'Zuzana', 'Řehoř', 'Chroust', 'Čeněk', 'Adam', 'Ondřej');
$pole = SortUTF::sort($pole, true);
print_r($pole);
Array ( [0] => Adam [1] => Čeněk [2] => Chroust [3] => Klára [4] => Ondřej [5] => Řehoř [6] => Zuzana )

Poslední parametr metody nám dává možnost nahradit předdefinovaný řetězec znaků abecedy řetězcem vlastním (jednotlivé znaky oddělujte čárkou). V tom případě nezapomeňte předávat i parametr $useCh;

$pole = SortUTF::sort($pole, NULL, $string);

V komentářích samozřejmě uvítám případné připomínky.

Program byl vytvořen v roce 2016.

 

Stáhnout

Staženo 39x (1.02 kB)
Aplikace je včetně zdrojových kódů v jazyce php

 

 

Program pro vás napsal Ondřej Crha
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
Miniatura
Všechny články v sekci
Ostatní tutoriály v PHP
Aktivity (2)

 

 

Komentáře

Avatar
1Pupik1989
Člen
Avatar
1Pupik1989:10.4.2016 23:47

Já na řazení českých znaků používám nativní funkci "usort".

 
Odpovědět 10.4.2016 23:47
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.