From a2cec4257173803118dfa18f07a1e6ecae3bba55 Mon Sep 17 00:00:00 2001 From: Andriy Chaika Date: Thu, 5 May 2011 10:22:06 +0300 Subject: [PATCH] =?UTF-8?q?[0.1.2]=20=D0=90=D0=B2=D1=82=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B9=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=B8=D1=81=D0=BA=20=D0=A4=D0=98=D0=9E=20=D0=B2=20=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=BA=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Library/NCL.NameCase.ru.php | 121 ++++++++++++++++++++++++++++-------- Tutorial/test.php | 2 +- 2 files changed, 96 insertions(+), 27 deletions(-) diff --git a/Library/NCL.NameCase.ru.php b/Library/NCL.NameCase.ru.php index b32dad3..b5d0a2d 100644 --- a/Library/NCL.NameCase.ru.php +++ b/Library/NCL.NameCase.ru.php @@ -1053,11 +1053,11 @@ class NCLNameCaseRu { $this->fatherName = $list[$key]; } - $format.=$letter.' '; + $format.=$letter . ' '; } return trim($format); } - + /* * Склонение имени * @@ -1262,6 +1262,66 @@ class NCLNameCaseRu return $this->getFatherNameCase($CaseNumber); } + /* + * Склоняет во все падежи и форматирует по шаблону $format + * Шаблон $format + * S - Фамилия + * N - Имя + * F - Отчество + * + * @return array + */ + + public function getFormattedArray($format) + { + $length = mb_strlen($format); + $result = array(); + $cases=array(); + for ($i = 0; $i < $length; $i++) + { + $symbol = mb_substr($format, $i, 1); + if ($symbol == 'S') + { + $cases['S']=$this->getSecondNameCase(); + } + elseif ($symbol == 'N') + { + $cases['N']=$this->getFirstNameCase(); + } + elseif ($symbol == 'F') + { + $cases['F']=$this->getFatherNameCase(); + } + } + + for ($curCase = 0; $curCase<6; $curCase++) + { + $line=""; + for ($i = 0; $i < $length; $i++) + { + $symbol = mb_substr($format, $i, 1); + if ($symbol == 'S') + { + $line.=$cases['S'][$curCase]; + } + elseif ($symbol == 'N') + { + $line.=$cases['N'][$curCase]; + } + elseif ($symbol == 'F') + { + $line.=$cases['F'][$curCase]; + } + else + { + $line.=$symbol; + } + } + $result[]=$line; + } + return $result; + } + /* * Склоняет в падеж $caseNum, и форматирует по шаблону $format * Шаблон $format @@ -1277,29 +1337,36 @@ class NCLNameCaseRu public function getFormatted($caseNum=0, $format="S N F") { - $length = mb_strlen($format); - $result = ""; - for ($i = 0; $i < $length; $i++) + if (is_null($caseNum)) { - $symbol = mb_substr($format, $i, 1); - if ($symbol == 'S') - { - $result.=$this->getSecondNameCase($caseNum); - } - elseif ($symbol == 'N') - { - $result.=$this->getFirstNameCase($caseNum); - } - elseif ($symbol == 'F') - { - $result.=$this->getFatherNameCase($caseNum); - } - else - { - $result.=$symbol; - } + return $this->getFormattedArray($format); + } + else + { + $length = mb_strlen($format); + $result = ""; + for ($i = 0; $i < $length; $i++) + { + $symbol = mb_substr($format, $i, 1); + if ($symbol == 'S') + { + $result.=$this->getSecondNameCase($caseNum); + } + elseif ($symbol == 'N') + { + $result.=$this->getFirstNameCase($caseNum); + } + elseif ($symbol == 'F') + { + $result.=$this->getFatherNameCase($caseNum); + } + else + { + $result.=$symbol; + } + } + return $result; } - return $result; } /* @@ -1331,19 +1398,21 @@ class NCLNameCaseRu { return $this->srule; } - + /* * Быстрое склонение имени. Передается один параметр строка, где может быть ФИО в любом виде. Есть необязательный параметр пол. И так ще необязательный параметр падеж. Если падеж указан, тогда возвращается строка в том падеже, если нет тогда все возможные падежи. * * @return string */ + public function q($fullname, $caseNum=null, $gender=null) { - $format=$this->splitFullName($fullname); - $this->gender=$gender; + $format = $this->splitFullName($fullname); + $this->gender = $gender; $this->genderAutoDetect(); return $this->getFormatted($caseNum, $format); } + } ?> \ No newline at end of file diff --git a/Tutorial/test.php b/Tutorial/test.php index 545b938..eb423af 100644 --- a/Tutorial/test.php +++ b/Tutorial/test.php @@ -9,4 +9,4 @@ require '../Library/NCL.NameCase.ru.php'; * 2. Создаем объект */ $nc = new NCLNameCaseRu(); -print_r($nc->qFullName("Рижиков", "Тарас", "Геннадиевич", NCLNameCaseRu::$MAN, NCLNameCaseRu::$DATELN)); \ No newline at end of file +print_r($nc->q("Рижиков Тарас Геннадиевич")); \ No newline at end of file