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

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

А для лучшей читабельности можно все варианты из условия вынести в массивы, и проверять методом in_array
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';
}