Split a given string to extract hiragana substrings.
public static extractHiragana ( string $str, integer $length, boolean $yoon = false ) : array | ||
$str | string | The input string. |
$length | integer | (optional) Define an optional substring length. Default to 0 which means substrings will be returned as it is. |
$yoon | boolean | (optional) Whether considering the base syllable and the following yoon character as a single character or not Default to false. |
리턴 | array | An array of hiragana substrings. |
public function testExtractHiraganaWithLengthEqualsNAndYoonTrue() { $result = Helper::extractHiragana('じゃ、行きましょう', 3, true); $this->assertSame(array('じゃきま', 'しょう'), $result); }
/** * Converts a year in Japanese format into Western format. * * @param $year : kanji or hiragana era name followed by digits, or era name in romaji, space and digit. I.e. : 明治33, めいじ33, Meiji 33 * @return string|array : The year(s) in Western format. * @throws Exception */ public static function toWesternYear($year) { if (Analyzer::hasKanji($year)) { $key = 'kanji'; $eraName = Helper::extractKanji($year); $eraName = $eraName[0]; $eraValue = (int) Helper::subString($year, Analyzer::length($eraName), Analyzer::length($year)); } elseif (Analyzer::hasHiragana($year)) { $key = 'kana'; $eraName = Helper::extractHiragana($year); $eraName = $eraName[0]; $eraValue = (int) Helper::subString($year, Analyzer::length($eraName), Analyzer::length($year)); } else { $key = 'romaji'; $year = strtolower($year); $parts = explode(' ', $year); $eraName = $parts[0]; $eraValue = (int) $parts[1]; } if (empty($eraName) || empty($eraValue)) { throw new Exception('Invalid year ' . $year); } $max = count(self::$mapEras); $westernYears = array(); for ($i = 0; $i < $max; $i++) { $era = self::$mapEras[$i]; $overflown = false; if (strtolower($era[$key]) == $eraName) { $eraStart = $era['year']; $westernYear = $eraStart + $eraValue - 1; if ($i < $max - 1) { $nextEra = self::$mapEras[$i + 1]; $nextEraYear = $nextEra['year']; if ($westernYear > $nextEraYear) { $overflown = true; } } $westernYears[] = array('value' => $westernYear, 'overflown' => $overflown); } } $results = array(); foreach ($westernYears as $westernYear) { if (!$westernYear['overflown']) { $results[] = $westernYear['value']; } } if (empty($results)) { throw new Exception('Year ' . $year . ' is invalid'); } elseif (count($results) == 1) { return $results[0]; } else { return $results; } }