*/ class pinyin { /** * Constructor. * */ public function __construct() { $this->segments = array(); $segment = dirname(__FILE__) . '/data/words'; if(file_exists($segment)) $this->segments = include $segment; } /** * Convert string to pinyin. * * @param string $string * @param string $option * * @return array */ public function convert($string) { $pinyin = $this->romanize($string); $split = array_filter(preg_split('/[^a-z]+/iu', $pinyin)); return array_values($split); } /** * Preprocess. * * @param string $string * * @return string */ public function prepare($string) { if(version_compare(PHP_VERSION, '7.2.0') >= 0) { $string = preg_replace_callback('/[a-z0-9_-]+/i', function($matches) { return "\t" . $matches[0]; }, $string); } else { $string = preg_replace_callback('/[a-z0-9_-]+/i', create_function('$matches', 'return "\t" . $matches[0];'), $string); } return preg_replace("/[^\p{Han}\p{P}\p{Z}\p{M}\p{N}\p{L}\t]/u", '', $string); } /** * Convert Chinese to pinyin. * * @param string $string * @param bool $isName * * @return string */ public function romanize($string) { $string = $this->prepare($string); $string = strtr($string, $this->segments); return $string; } }