Autor Zpráva
simka
Profil *
dejme tomu, že má toto pole:
$x = array ('F', 'C', 'A', 'Č', 'Z');

seřadím jej:
sort($x);

a vypíšu výsledky:
foreach ($x as $k => $h) {
echo "$x <br>\n";
}

ale č mi to hodí až na konec, tak jak mám udělat, aby se mi to správně seřadilo i při použití češtiny?
igamenir
Profil
To nepůjde tak jednoduše. PHP řadí (pravděpodobně) jenom podle ordinálních hodnot, takže pro jiné řazení si to musíš sám udělat. Slouží k tomu funkce usort, které předáš pole a funkci určující, který ze dvou prvků je větší. viz url=http://mirrors.inway.cz/manual/cs/function.usort.php

V php jsem to zatím nedělal, ale v jiných programovacích jazykách se mi osvědčilo pole, kde index je znak a hodnota je číslo znaku. funkce pak vrací rozdíl hodnot předaných parametrů:

$cestina = array('a' => 1, 'á' => 2, 'b' => 3, 'c' => 4, 'č' => 5, atd.);

function razeni($a, $b) { return $GLOBALS['cestina'][$a] - $GLOBALS['cestina'][$b]; }
usort($x, "razeni");


- Je to jenom zjednodušeně. Čeština se běžně řadí na tři průchody (pole): bez většiny diakritiky, s diakritikou a potom velká-malá.
Hugo
Profil
simka

Podívej se do php manuálu.

http://mirrors.inway.cz/manual/en/function.sort.php

Na položku SORT_LOCALE_STRING to by mělo pomoct.
igamenir
Profil
Hugo
Tak o tom sem nevěděl. Jak snadné:
setlocale(LC_ALL,"cz");

usort($pole, 'strcoll');
Toto téma je uzamčeno. Odpověď nelze zaslat.

0