Overview
  • Namespace
  • Class
  • Tree
  • Todo

Namespaces

  • jp3cki
    • gimei
      • address
      • name

Classes

  • jp3cki\gimei\address\Address
  • jp3cki\gimei\address\AddressUnit
  • jp3cki\gimei\address\Dictionary
  • jp3cki\gimei\address\Factory
  • jp3cki\gimei\DataUnit
  • jp3cki\gimei\Gimei
  • jp3cki\gimei\name\Dictionary
  • jp3cki\gimei\name\Factory
  • jp3cki\gimei\name\Gender
  • jp3cki\gimei\name\NameUnit
  • jp3cki\gimei\name\Person

Exceptions

  • jp3cki\gimei\Exception
  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 
<?php
/**
 * @author AIZAWA Hina <hina@bouhime.com>
 * @copyright 2015 AIZAWA Hina <hina@bouhime.com>
 * @license https://github.com/fetus-hina/gimei-php/blob/master/LICENSE MIT
 */

namespace jp3cki\gimei\name;

use jp3cki\gimei\Exception;

/**
 * データファイルを読み込み保持するクラス
 *
 * @property-read array prefectures
 * @property-read array cities
 * @property-read array towns
 */
class Dictionary
{
    /**
     * 男性名のリスト
     * @var string[][]
     */
    private $maleFirstNames;

    /**
     * 女性名のリスト
     * @var string[][]
     */
    private $femaleFirstNames;

    /**
     * 名字のリスト
     * @var string[][]
     */
    private $lastNames;

    /**
     * コンストラクタ
     *
     * @param string $jsonPath データファイルのパス
     */
    public function __construct($jsonPath)
    {
        $this->load($jsonPath);
    }

    /**
     * 名前をランダムに選択して返す
     *
     * @param mixed Gender::MALE | Gender::FEMALE 選択する性
     * @return string[]
     */
    public function getOneOfFirstName($gender)
    {
        if ($gender === Gender::MALE) {
            return $this->maleFirstNames[
                mt_rand(0, count($this->maleFirstNames) - 1)
            ];
        } elseif ($gender === Gender::FEMALE) {
            return $this->femaleFirstNames[
                mt_rand(0, count($this->femaleFirstNames) - 1)
            ];
        }
        throw new Exception('Invalid gender: ' . $gender);
    }

    /**
     * 名字をランダムに選択して返す
     *
     * @return string[]
     */
    public function getOneOfLastName()
    {
        return $this->lastNames[
            mt_rand(0, count($this->lastNames) - 1)
        ];
    }

    /**
     * ファイルを読み込む
     *
     * @param string $jsonPath ファイルパス
     */
    private function load($jsonPath)
    {
        if (!file_exists($jsonPath)) {
            throw new Exception('Could not find ' . basename($jsonPath));
        }

        $json = json_decode(file_get_contents($jsonPath), true);
        if (!isset($json['first_name']['male']) ||
                !isset($json['first_name']['female']) ||
                !isset($json['last_name'])) {
            throw new Exception('Broken json: ' . basename($jsonPath));
        }

        $this->maleFirstNames = $json['first_name']['male'];
        $this->femaleFirstNames = $json['first_name']['female'];
        $this->lastNames = $json['last_name'];
    }
}
API documentation generated by ApiGen