OlegKor
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Приветствую всех! не знаю на счет интересности и оригинальности, но вот буквально вчера "кровь из носу" понадобилось склонение ФИО в дательный падеж ... И по Инету ничего толком не нашел. Пришлось написать самостоятельно... Предлагаю Вашему вниманию три функции (Для Фамилии, Имени и Отчества отдельно) И еще одно замечание, делалось мной для украинского языка (но я думаю для русского не сложно будет подправить) Фамилия в Дательном падеже Код: // Фамилия в Дательном падеже function padezSurname ($surname, $sex = 0){ $result = ''; $l = mb_substr(trim($surname),-1,1,"utf-8"); if($sex == 1) { // Если Пол мужской = 1 switch ($l) { case 'о': case 'и': case 'я': case 'а': $result = $surname; break; case 'й': $len = mb_strlen($surname,"utf-8")-2; $result =mb_substr(trim($surname), 0,$len ,"utf-8").'ому'; break; default: $result = $surname . "у"; } } elseif($sex == 0) { // Если Пол женский = 0 switch ($l) { case 'о': case 'и': case 'б': case 'в': case 'г': case 'д': case 'ж': case 'з': case 'і': case 'ї': case 'к': case 'л': case 'м': case 'н': case 'п': case 'р': case 'с': case 'т': case 'ф': case 'х': case 'ц': case 'ч': case 'ш': case 'щ': case 'ь': $result = $surname; break; case 'а': $len = mb_strlen($surname,"utf-8")-1; $result = mb_substr(trim($surname), 0,$len ,"utf-8").'ій'; break; default: $len = mb_strlen($surname,"utf-8")-2; $result = mb_substr(trim($surname), 0,$len ,"utf-8").'ій'; } } return $result; } | Имя в Дательном падеже Код: // Имя в Дательном падеже function padezName ($name, $sex = 0){ $result = ''; $l = mb_substr(trim($name),-1,1,"utf-8"); if($sex == 1) { // Если Пол мужской = 1 switch ($l) { case 'й': $len = mb_strlen($name,"utf-8")-1; $result =mb_substr($name, 0,$len ,"utf-8").'ю'; break; case 'о': $len = mb_strlen($name,"utf-8")-1; $result =mb_substr($name, 0,$len ,"utf-8").'у'; break; default: $result = $name.'у'; } } elseif($sex == 0) { // Если Пол женский = 0 switch ($l) { case 'я': $len = mb_strlen($name,"utf-8")-1; $result = mb_substr(trim($name), 0,$len ,"utf-8").'ї'; break; case 'а': $len = mb_strlen($name,"utf-8")-1; $result = mb_substr(trim($name), 0 ,$len ,"utf-8").'і'; break; default: $result = $name; } } return $result; } | Отчество в Дательном падеже Код: // Отчество в Дательном падеже function padezMiddleName ($middleName, $sex = 0){ $result = ''; if($sex == 1) { // Если Пол мужской = 1 $result = $middleName . "у"; } elseif($sex == 0) { // Если Пол женский = 0 if (mb_substr(trim($middleName),-1,1,"utf-8") == 'а') { $len = mb_strlen($middleName,"utf-8")-1; $result = mb_substr(trim($middleName), 0,$len ,"utf-8").'і'; } else { $result = $middleName ; } } return $result; } | Использование "примитивное" передаем в функцию, например Фамилию и вторым параметром "пол" (муж = 1, жен = 0) и получаем в ответ значение в дательном падеже т.е. отдаем Иванов, получаем Иванову .. Все просто. Добавлено: Хотел поделиться с Вами скриптом для создания Адрессного классификатора Административного деления Украины с новыми почтовыми индексами населенных пунктов... Мало ли, может кому пригодится. Скрипт создает необходимые таблицы в базе данных (MySQL 5.0) заполняет их данными, все данные в таблицах уже повязаны кодами .. Имена таблиц для использования как в Joomla (например, #__umcit_spr_address_city), кому не нравится подправьте в скрипте под себя. Если кому пригодится буду рад. P.S. - Данные конвертированы из MS SQL 2005, у меня после конвертации, скрипт глюкнул в INSERT INTO на табличке (не помню точно - конвертил 2 мес назад и из-под phpMyAdmin глючил, а вот из-под EMS прокатывало) по-моему это табличка с наименованиями улиц ... Она не особо важна, так что можете INSERT INTO для нее кильнуть (ну вобщем если случиться error, то он подскажет). А остальное работает по сей день и в версии MySQL и в версии MS SQL 2005 (в MS SQL 2005 работает уже 4 года) А это пример запроса для выборки --- Область --- Район ---Населенный пункт ... по заданному почтовому индексу Код: SELECT jos_umcit_spr_address_city.ID, jos_umcit_spr_address_city.Name, jos_umcit_spr_address_region.Name AS Reg_Name, jos_umcit_spr_address_obl.Name AS OblName FROM jos_umcit_spr_address_region INNER JOIN jos_umcit_spr_address_city ON (jos_umcit_spr_address_region.ID = jos_umcit_spr_address_city.Region_ID) INNER JOIN jos_umcit_spr_address_obl ON (jos_umcit_spr_address_region.Oblast_ID = jos_umcit_spr_address_obl.ID) WHERE jos_umcit_spr_address_city.PostIndex5 = '09200' | P.S. - Не нашел. как тут можно прикрепить файл для скачивания. так что сам скрипт можно будет скачать ТУТ И еще, в данных о почтовых индексах существуют сведения об Индексе для населенного пункта еще "Совдеповского" (старого) формата. Это, как вы помните 6-ти значные номера ... Т.е. есть новая и старая почтовая индексация населенных пунктов Украины ... Новые индексы находятся в поле PostIndex5 Старые "Совдеповские" индексы в поле PostIndex6 | Всего записей: 19 | Зарегистр. 27-10-2006 | Отправлено: 21:04 03-11-2009 | Исправлено: OlegKor, 13:45 15-12-2009 |
|