Last active
August 29, 2015 13:57
-
-
Save Glutexo/9463020 to your computer and use it in GitHub Desktop.
Funkce pro hezké české vyskloňování podstatného jména.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Vyskloňuje slovo hezky česky buď podle staršího, | |
// méně benevoletního a méně prasáckého paradigmatu: | |
// 1 položka, 2 položky, 5 položek, 10 položek, | |
// 15 položek, 20 položek, 21 položka, 22 položky | |
// 25 položek, 100 položek, 101 položka… | |
// nebo podle nového, čuňáckého: | |
// 1 položka, 2 položky, 5 položek, 10 položek, | |
// 15 položek, 20 položek, 21 položek, 22 položek | |
// 25 položek, 100 položek, 101 položek… | |
// | |
// Volání: decline(123, 'položka', 'položky', 'položek'); | |
// Pozn.: Funguje jen pro nezáporná celá čísla. | |
function decline($val, $nom_sg, $nom_pl, $gen_pl,$nice = true) { | |
if($nice) { | |
$last_h = substr($val, -2); | |
$last_d = substr($val, -1); | |
if(($last_h >= 5 && $last_h <= 20) || $last_d == 0) { | |
$suffix = $gen_pl; | |
} else { | |
if($last_d == 1) { | |
$suffix = $nom_sg; | |
} elseif($last_d >= 5) { | |
$suffix = $gen_pl; | |
} else { | |
$suffix = $nom_pl; | |
} | |
} | |
} elseif($val == 1) { | |
$suffix = $nom_sq; | |
} elseif($val > 0 && $val < 5) { | |
$suffix = $nom_pl; | |
} else { | |
$suffix = $gen_pl; | |
} | |
return $suffix; | |
// Možno vracet i celé číslo, ne jen počítací slovo. | |
// Pozn.: Ani tvrdá mezera, ani např. nelze | |
// použít jako parametr funkce number_format, neboť | |
// se nevyrovná s tím, že je tento parametr delší | |
// než jeden bajt. | |
$str = number_format($val, 0, ',', '*'); | |
$str = str_replace('*', ' ', $str); // tvrdá mezera | |
// Pozn.: Nepoužijeme-li chlupaté závorky, PHP si | |
// bude myslet, že ta tvrdá mezera je součást názvu | |
// proměnné. | |
return "{$str} {$suffix}"; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment