@Tutucu

Почему strcasecmp не сравнивает строки с разным регистром?

Написал функцию, в ней цикл проходит по массиву и сравнивает города по последней букве, введённой пользователем с городами, которые находятся в массиве, если находит - показывает найденный город, если нет, выводит соответствующее сообщение. Если написать город с заглавной буквой на конце, то всё работает, если же с маленькой, то выдаёт ошибку (которую я написал в условии). Из-за чего это происходит?
if(is_array($city_db))
		{
			foreach($city_db as $c)
			{
				$first_c = mb_substr($c, 0, 1);
				if(strcasecmp($city_first, $first_c) == 0)
				{
					return $c;
				}
				else
				{
					$result = 'Такого города в базе - нет!';
				}
				
			}
			if(isset($result))
			{
				return $result;
			}
		}
		else
		{
			return 'Проверьте базу городов!';
		}
  • Вопрос задан
  • 424 просмотра
Решения вопроса 1
tkutru
@tkutru
A programming cat.
Скорее всего проблема в мультибайтовой кодировке (юникод).
Попробуйте для регистронезависимого сравнения строк использовать мультибайтовую версию функции strcasecmp
function mb_strcasecmp($str1, $str2, $encoding = null) {
    if (null === $encoding) { $encoding = mb_internal_encoding(); }
    return strcmp(mb_strtoupper($str1, $encoding), mb_strtoupper($str2, $encoding));
}

Отсюда php.net/manual/en/function.strcasecmp.php#107016
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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