Здравствуйте. Столкнулся с проблемой при решении задачи на написание функции, которая будет возвращать число от
0 до 999 прописью. Я решил сделать её через создание трёх if — для однозначного, двузначного и трехзначного чисел. Скорее всего, не оптимальное решение, но я только учусь, поэтому не судите строго.
Вопрос: почему не срабатывает условие
if ($num === $key)
, а сразу переходит к исполнению else? Почему оно всегда оказывается ложным? Если закомментировать else и всё, что идёт дальше, то
if ($num === $key)
срабатывает и всё отображается как надо. Заранее спасибо за помощь!
function inWords ($num) {
$strNum = strval($num);
$variants =
[0 => 'ноль', 11 => 'одиннадцать', 40 => 'сорок', 600 => 'шестьсот',
1 => 'один', 12 => 'двенадцать', 50 => 'пятьдесят', 700 => 'семьсот',
2 => 'два', 13 => 'тринадцать', 60 => 'шестьдесят', 800 => 'восемьсот',
3 => 'три', 14 => 'четырнадцать', 70 => 'семьдесят', 900 => 'девятьсот',
4 => 'четыре', 15 => 'пятнадцать', 80 => 'восемьдесят',
5 => 'пять', 16 => 'шестнадцать', 90 => 'девяносто',
6 => 'шесть', 17 => 'семнадцать', 100 => 'сто',
7 => 'семь', 18 => 'восемнадцать', 200 => 'двести',
8 => 'восемь', 19 => 'девятнадцать', 300 => 'триста',
9 => 'девять', 20 => 'двадцать', 400 => 'четыреста',
10 => 'десять', 30 => 'тридцать', 500 => 'пятьсот'
];
if (strlen($strNum) === 1) {
echo $variants[$num];
}
if (strlen($strNum) === 2) {
foreach ($variants as $key => $elem) {
if ($num === $key) {
echo $elem;
} else {
$dozens = 10 * floor($num / 10);
echo $variants[$dozens] . ' ' . $variants[$strNum[1]];
break;
}
}
}
}
inWords(18);