@Bokovlad

Почему в функции проверки всегда возвращается значение только первого условия?

Пытаюсь получить значение в зависимости от входящих данных. Написал функцию:
function get_fo($distr) {
if ($distr === ('31') || ('32')|| ('33')|| ('36')|| ('37')|| ('40')|| ('46')|| ('48')|| ('50')|| ('57')|| ('62')|| ('67')|| ('68')|| ('69')|| ('71')|| ('76') ) { return 'ЦФО';} 
elseif ($distr === ('10')|| ('11')|| ('29')|| ('83')|| ('35')|| ('39')|| ('47')|| ('51')|| ('53')|| ('60')) { return 'СЗФО';}
elseif ($distr === ('1') || ('5') || ('6')|| ('7')|| ('8')|| ('9')|| ('15')|| ('95')|| ('23')|| ('26')|| ('30')|| ('34')|| ('61')) { return  'ЮФО';} 
elseif ($distr === ('2') || ('12')|| ('13')|| ('16')|| ('18')|| ('21')|| ('43')|| ('59')|| ('52')|| ('56')|| ('59')|| ('63')|| ('64')|| ('73')) { return  'ПФО';} 
elseif ($distr === ('45')|| ('66')|| ('72')|| ('86')|| ('74')|| ('89')) { return 'УФО';} 
elseif ($distr === ('3')|| ('4')|| ('17')|| ('19')|| ('22')|| ('24')|| ('38')|| ('42')|| ('54')|| ('55')|| ('70')) { return 'СФО';} 
elseif ($distr === ('14')|| ('41')|| ('25')|| ('27')|| ('28')|| ('49')|| ('65')|| ('79')|| ('87')) { $fo = 'ДФО';} 
elseif ($distr === ('92') || ('82')) { return 'Крым';} 
else {return 'fff';}
}

Но вне зависимости от значения которое я отдаю функции на входе, всегда получаю результат выполнения первого условия, т.е. ЦФО
  • Вопрос задан
  • 69 просмотров
Решения вопроса 2
('32') === true

Необходимо продублировать сравнение для каждого из вариантов:
if ($distr === '31' || $distr === '32' || ....)

А для лучшей читабельности можно все варианты из условия вынести в массивы, и проверять методом in_array
Ответ написан
toxa82
@toxa82
function get_fo($distr) {
    $data = [
        'ЦФО'  => ['31', '32', '33', '36', '37', '40', '46', '48', '50', '57', '62', '67', '68', '69', '71', '76'],
        'СЗФО' => ['10', '11', '29', '83', '35', '39', '47', '51', '53', '60'],
        'ЮФО'  => ['1', '5', '6', '7', '8', '9', '15', '95', '23', '26', '30', '34', '61'],
        'ПФО'  => ['2', '12', '13', '16', '18', '21', '43', '59', '52', '56', '59', '63', '64', '73'],
        'УФО'  => ['45', '66', '72', '86', '74', '89'],
        'СФО'  => ['3', '4', '17', '19', '22', '24', '38', '42', '54', '55', '70'],
        'ДФО'  => ['14', '41', '25', '27', '28', '49', '65', '79', '87'],
        'Крым' => ['92', '82'],
    ];
    foreach ($data as $fo => $value) {
        if (in_array($distr, $value)) {
            return $fo;
        }
    }
    return 'fff';
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы