БлогNot. PHP: класс для генерации пары слов "Имя+Фамилия"

Помощь дата->рейтинг Поиск Почта RSS канал Статистика nickolay.info Домой

PHP: класс для генерации пары слов "Имя+Фамилия"

Добавлю этот небольшой класс в коллекцию PHP-функций, которые всё ещё могут пригодиться при автоматической генерации контента и не только.

Используя 3 содержащихся в архиве небольших файла-словаря:

класс getRussianNames генерирует и возвращает с помощью метода get список из нужного количества мужских или женских имён и фамилий:

Больше русских фамилий одним файлом было вот тут. Для женской формы русской фамилии отдельного словаря нет, функция getWomanForm склоняет их по простейшим правилам:

Все файлы и сам скрипт - в однобайтовой кодировке Windows-1251, для работы с Юникодом, возможно, придётся немного поправить регулярные выражения.

Также код показывает, как включённый через include или require скрипт может узнать свою текущую папку, например, если файлы скрипта находятся на сервере во вложенной папке namelist, а вызывается (и берёт дополнительные файлы-словари) он из папки, находящейся уровнем выше, как и показано в коде. Менять что-либо в коде класса в норме не придётся.

Вот исходники и результат тестового прогона:

Файл класса namelist/index.php
<?php
class getRussianNames {
 private $n, $ready, $fmale, $ffemale, $flast;
 public function __construct ($n=1) {
  $this->n = $n;
  $this->fmale=dirname(__FILE__).'/'.'male.txt'; 
  $this->ffemale=dirname(__FILE__).'/'.'female.txt'; 
  $this->flast=dirname(__FILE__).'/'.'last.txt';
  $this->ready = 
   (file_exists($this->fmale) and filesize($this->fmale)>1 and
    file_exists($this->ffemale) and filesize($this->ffemale)>1 and
    file_exists($this->flast) and filesize($this->flast)>1);
 }

 private function getWomanForm ($last) {
  $last = preg_replace ("/^(.+)(ов|ев|ёв|ин|ын)$/","$1$2а",$last);
  $last = preg_replace ("/^(.+)(ый|ий)$/","$1ая",$last);
  return $last;
 }

 public function get ($gender=true,$div="<br />\n") {
  $str = '';
  if (!$this->ready) return 'Неизвестное Ноунейменко';
  $male = file($this->fmale,FILE_IGNORE_NEW_LINES);
  $female = file($this->ffemale,FILE_IGNORE_NEW_LINES);
  $last = file($this->flast,FILE_IGNORE_NEW_LINES);
  shuffle($male);
  shuffle($female);
  shuffle($last);
  for ($i=0; $i<$this->n; $i++) {
   $str .= ($gender ? $male[$i] . ' ' . $last[$i] :
                      $female[$i] . ' ' . $this->getWomanForm($last[$i]));
   if ($i<$this->n-1) $str .= $div;
  }
  return $str;
 }
} //class getRussianNames end
?>
Файл namelist.php с вызовом класса из вложенной папки namelist
<?php
require_once('namelist/index.php');
$list = new getRussianNames(10);
echo $list->get(true);
echo "<br />\n";
echo $list->get(false);
?>
Случайный результат прогона
Памфил Бендлин
Геронтий Соболевский
Ульманас Жуков
Пимен Никифоров
Гастон Делов
Исай Лепёхин
Сергей Аношкин
Илларион Голубов
Винсент Перов
Камиль Снаткин
Анэля Харченко
Нинель Терентьева
Клеопатра Посохова
Елизавета Островская
Агния Шестакова
Ада Ласкутина
Аксинья Дмитриева
Анжела Пичугина
Таира Расторгуева
Иоанна Царёва

 Скачать файлы скрипта и словари в архиве .zip (10 Кб)


теги: php random список словарь язык

комментарии (0)

14.02.2017, 14:57; рейтинг: 1543

  свежие записипоиск по блогукомментироватьстатистика

Наверх Яндекс.Метрика
© PerS
вход