froops
@froops

Как определить регистр буквы?

Как определить регистр первой буквы на PHP?
Используется UTF-8, русские и английские символы. Пых, как модуль апача.
Раньше делал так:

// Слово, пол: 1 OR 2
	function generic_slovo_pol($slovo, $pol) {
		
		// Массив слов в зависмости от пола юзера
		$array_slovo = array(
			'друг' => array(1 => 'друг', 2 => 'подруга'),
			'верный' => array(1 => 'верный', 2 => 'верная'),
			'предложил' => array(1 => 'предложил', 2 => 'предложила'),
			'сир' => array(1 => 'сир', 2 => 'миледи'),
			'мессир' => array(1 => 'мессир', 2 => 'мисс'),
		);
		
		foreach($array_slovo as $key => $value) {
			
			// Сравнение слов без учета регистра
			if(mb_strcasecmp($key, $slovo, 'UTF-8') == 0) {
				
				$res = ($pol == 2) ? $value[2] : $value[1];
				$res = mb_substr($slovo, 0, 1, 'UTF-8').mb_substr($res, 1, mb_strlen($res), 'UTF-8');
				
				return $res;
				
			}
		}
		
		return false;
	}

И всё работало до слова "Сир". Я просто брал первую букву мужского слова и добавлял её..
  • Вопрос задан
  • 865 просмотров
Пригласить эксперта
Ответы на вопрос 1
Tesla
@Tesla
Если я правильно понял, то вот:

function generic_slovo_pol($slovo, $pol, $charset = 'UTF-8')
{
	$array_slovo = array(
		'друг'      => 'подруга',
		'верный'    => 'верная',
		'предложил' => 'предложила',
		'сир'       => 'миледи',
		'мессир'    => 'мисс',
	);

	if (isset($array_slovo[mb_strtolower($slovo, $charset)]))
	{
		$res = $pol == 2 ? $array_slovo[mb_strtolower($slovo, $charset)] : mb_strtolower($slovo, $charset);

		return mb_strtoupper(mb_substr($slovo, 0, 1, $charset), $charset) == mb_substr($slovo, 0, 1, $charset)
		     ? mb_convert_case($res, MB_CASE_TITLE, $charset)
		     : $res;
	}

	return false;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект