Вход Регистрация
* forsim

Склонение фамили и имени

  1. <?
  2. function
  3. changename
  4. ($changename=
  5. 'ПупкинВасилий',
  6. $gender=1,
  7. $case=1){
  8. //Разделяем
  9. данныенафамилию
  10. иимя
  11. $partname=
  12. $changename);
  13. //Еслипадежне
  14. именительный,
  15. начинаемработу
  16. if($case>1){
  17. //Получаем
  18. фамилиюиимя
  19. $sn=$partname
  20. ['0'];
  21. $n=$partname
  22. ['1'];
  23. //Получаемдлину
  24. фамилиииимени
  25. (кол-во
  26. символов)
  27. $lsn=utf_strlen
  28. ($sn);
  29. $ln=utf_strlen
  30. ($n);
  31. //Получаемдлину
  32. фамилиииимени
  33. допредпоследней
  34. буквы(кол-во
  35. символов)
  36. $m1sn=$lsn-1;
  37. $m1n=$ln-1;
  38. $m2n=$ln-2;
  39. //Выводим
  40. последниесимволы
  41. (окончания)для
  42. дальнейшего
  43. сравненияс
  44. окончаниямив
  45. массиве
  46. $e1sn=
  47. utf_substr($sn,
  48. $m1sn,1);
  49. $e1n=utf_substr
  50. ($n,$m1n,1);
  51. $e2n=utf_substr
  52. ($n,$m2n,2);
  53. //Получаем
  54. фамилиюиимябез
  55. последних
  56. символов
  57. $n1esn=
  58. utf_substr($sn,
  59. 0,$m1sn);
  60. $n1en=
  61. utf_substr($n,0,
  62. $m1n);
  63. $n2en=
  64. utf_substr($n,0,
  65. $m2n);
  66. //Работас
  67. мужскойфамилией
  68. иименем
  69. if($gender==1)
  70. {
  71. //Массив
  72. окончаниймужских
  73. фамилий
  74. $mesn=array(
  75. '1'=>array
  76. ('о','х')
  77. );
  78. //Замена
  79. окончанийфамилии
  80. взависимостиот
  81. падежа
  82. $snlc=($case==
  83. 2)?'а':($case
  84. ==3)?'у':'';
  85. //Замена
  86. окончанийфамилий
  87. взависимостиот
  88. падежа
  89. ($e1sn,$mesn
  90. ['1'])){
  91. $surname=$sn;
  92. }else{
  93. $surname=$sn.
  94. $snlc;
  95. }
  96. //Массив
  97. окочаниймужских
  98. имен
  99. $men=array(
  100. '1'=>array
  101. ('ва','ма'),
  102. '2'=>array
  103. ('ек'),
  104. '3'=>array
  105. ('ел'),
  106. '4'=>array
  107. ('н','р','в',
  108. 'с','м','л',
  109. 'д'),
  110. '5'=>array
  111. ('й','ь'),
  112. '6'=>array
  113. ('я','а')
  114. );
  115. //Работас
  116. заменойокончаний
  117. мужскихименв
  118. зависимостиот
  119. падежа
  120. if($name=
  121. in_array($e2n,
  122. $men['1'])){
  123. $nlc=($case==
  124. 2)?'ы':($case
  125. ==3)?'е':'';
  126. $name=$n1en.
  127. $nlc;
  128. }elseif
  129. (in_array($e2n,
  130. $men['2'])){
  131. $nlc=($case==
  132. 2)?'ька':
  133. ($case==3)?
  134. 'ьку':'';
  135. $name=$n2en.
  136. $nlc;
  137. }elseif(in_array
  138. ($e2n,$men
  139. ['3'])){
  140. $nlc=($case==
  141. 2)?'ла':
  142. ($case==3)?
  143. 'лу':'';
  144. $name=$n2en.
  145. $nlc;
  146. }elseif(in_array
  147. ($e1n,$men
  148. ['4'])){
  149. $nlc=($case==
  150. 2)?'а':($case
  151. ==3)?'у':'';
  152. $name=$n.
  153. $nlc;
  154. }elseif
  155. (in_array($e1n,
  156. $men['5'])){
  157. $nlc=($case==
  158. 2)?'я':($case
  159. ==3)?'ю':'';
  160. $name=$n1en.
  161. $nlc;
  162. }elseif
  163. (in_array($e1n,
  164. $men['6'])){
  165. $nlc=($case==
  166. 2)?'и':($case
  167. ==3)?'е':'';
  168. $name=$n1en.
  169. $nlc;
  170. }else{
  171. $name=$n;
  172. }
  173. //Работас
  174. женскойфамилией
  175. иименем
  176. }elseif($gender
  177. ==2){
  178. //Массив
  179. окончанийженских
  180. фамилий
  181. $wesn=array(
  182. '1'=>array
  183. ('о','х')
  184. );
  185. //Замена
  186. окончанийфамилий
  187. взависимостиот
  188. падежа
  189. ($e1sn,$wesn
  190. ['1'])){
  191. $surname=$sn;
  192. }else{
  193. $surname=
  194. $n1esn.'ой';
  195. }
  196. //Массив
  197. окончанийженских
  198. имен
  199. $wen=array(
  200. '1'=>array
  201. ('ша','тя',
  202. 'ня','ка',
  203. 'ля'),
  204. '2'=>array
  205. ('ра','та',
  206. 'да','ма',
  207. 'на')
  208. );
  209. //Работас
  210. заменойокончаний
  211. женскихименв
  212. зависимостиот
  213. падежа
  214. if($name=
  215. in_array($e2n,
  216. $wen['1'])){
  217. $wlc=($case==
  218. 2)?'и':($case
  219. ==3)?'е':'';
  220. $name=$n1en.
  221. $wlc;
  222. }elseif
  223. (in_array($e2n,
  224. $wen['2'])){
  225. $wlc=($case==
  226. 2)?'ы':($case
  227. ==3)?'е':'';
  228. $name=$n1en.
  229. $wlc;
  230. }else{
  231. $name=$n;
  232. }
  233. //Есликакимто
  234. образомполне
  235. определенто
  236. ничегонеменяем
  237. }else{
  238. $surname=$sn;
  239. $name=$n;
  240. }
  241. //Соединяем
  242. измененные
  243. фамилиюиимя
  244. $fullname=
  245. $surname.''.
  246. $name;
  247. //Еслипадеж
  248. именительныйто
  249. ничегоне
  250. изменяем
  251. }else{
  252. $fullname=
  253. $changename;
  254. }
  255. //
  256. return$fullname;
  257. }
  258. Параметрыиих
  259. значения
  260. Первыйпараметр-
  261. фамилияиимяв
  262. именительном
  263. падеже(если
  264. правилонебудет
  265. соблюдено
  266. возможна
  267. некорректное
  268. склонение).
  269. Второй-пол
  270. пользователя,
  271. где:
  272. 1-мужской
  273. 2-женский
  274. Третий-падеж
  275. склонения,где:
  276. 1-именительный
  277. (кто,что)
  278. 2-родительный
  279. (кого,чего)
  280. 3-дательный
  281. (кому,чему)
  282. Вызываяфункциюи
  283. ПРАВИЛЬНОуказав
  284. всепараметрывы
  285. получитефамилию
  286. иимясклоненные
  287. повыбранному
  288. вамипадежу
  289. Вызовирезультат
  290. <?=changename
  291. ('ПупкинВася',
  292. 1,3)?>
» Описание: Функция склонения фамилии и имени например "Владимер Путин" то будет работать Владимеру Путину, или
» Время добавления: 11 Дек 2014 в 02:51
» Посмотров: 1268
» textarea
» Рейтинг: [+0 | -0]
Комментарии [2]
Онлайн: 2
Реклама