Определить, с какой буквы начинается слово

Статус
Закрыто для дальнейших ответов.

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
Есть функция, которая проверяет слово и выводит его в зависимости от пола пользователя:

function generic_slovo_pol($slovo, $pol) {
if(strnatcasecmp($slovo, 'Воин')) return ($pol == 2) ? 'воительница' : 'воин';
if(strnatcasecmp($slovo, 'Эльф')) return ($pol == 2) ? 'эльфийка' : 'эльф';
}

Нужно проверить, с какой буквы пришло $slovo, если с заглавной буквы, то возвратить результат с заглавной буквы, если же в функцию было слово передано с маленькой буквы, то вернуть тоже с маленькой..
Как это сделать?
 

AngelGabriel

И имя мне - легион
Регистрация
23.11.2008
Сообщения
778
Как-то может так, но с кирилицей полегче надо.
Код:
is_upper_first($str) {
    return $str[0] === strtoupper($str[0])?true:false;
}
В твоем случае можно
Код:
function generic_slovo_pol($slovo, $pol) {
        $res = '';
	if(strnatcasecmp($slovo, 'Воин')) $res = $pol == 2 ? 'воительница' : 'воин';
        if(strnatcasecmp($slovo, 'Эльф')) $res = $pol == 2 ? 'эльфийка' : 'эльф';
        return $slovo[0].substr($res, 1, strlen($res)-1);
}
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
AngelGabriel сказал(а):
В твоем случае можно
С UTF-8 не работает, вместо некоторых символов выводит квакозябрики :-/

Маленько подредактировал функцию:

function generic_slovo_pol($slovo, $pol) {

// Массив слов в зависимости от пола юзера
$array_slovo = array(
'воин' => 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', 'UTF-8', 'Windows-1251') == 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;
}

// Сравнение строк без учета регистра
function mb_strcasecmp($slovo1, $slovo2, $charset1, $charset2, $end_charset) {

// Приводим названия кодировок к нижнему регистру
$charset1 = strtolower($charset1);
$charset2 = strtolower($charset2);
$end_charset = strtolower($end_charset);

// Если кодировки не равны, то приводим к одному типу
if($charset1 != $end_charset) $slovo1 = iconv($charset1, $end_charset, $slovo1);
if($charset2 != $end_charset) $slovo2 = iconv($charset2, $end_charset, $slovo2);

return strcasecmp($slovo1, $slovo2);
}

Вроде бы работает со всеми символами, как нужно..
 
Статус
Закрыто для дальнейших ответов.
Верх Низ