@wfkryukov

Почему условие if всегда ложно?

Здравствуйте. Столкнулся с проблемой при решении задачи на написание функции, которая будет возвращать число от
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);
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Ну смотрите сами. В цикле первый элемент идёт с индексом key=0. Сравнение: num === key (18 === 0)? Не равно, конечно. Значит нужно выполнить код в else{}, что и делается. Собственно всё, финита ля комедия!
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@YuriyBum334
Строгое сравнение предполагает не только значение, но и тип данных.
Полагаю, что у Вас следующее:
'10' === 10 // false.

Делайте преобразование типа числа в строку или наоборот.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы