romanitalian
1/29/2016 - 11:32 AM

Заменяет диакретические знаки на один или несколько не диакретических

Заменяет диакретические знаки на один или несколько не диакретических

<?php
/**
 * Заменяет диакретические знаки
 * how to use:
 * $translated = Diacritic::getInstance()->translate('ёлка');
 */
class Diacritic extends Singleton
{
  public $dict;
  
  protected function __construct(){
    $this->init();
  }
  protected function init() {
    $this->dict = [
      'ё' => 'ио',
      'Ё' => 'Ио',
      'й' => 'ии',
      'Й' => 'Ии',
      ];
  }
  public function translate($str) {
    $out = str_replace(array_keys($this->dict), $this->dict, $str);
    return $out;
  }
}

class Singleton
{
    protected static $instance;
    
    public static function getInstance(){
        if (null === static::$instance) {
            static::$instance = new static();
        }
        return static::$instance;
    }

    protected function __construct(){}
    private function __clone(){}
    private function __wakeup(){}
}

$words = [
'актёр',
'бёдра',
'берёза',
'бурёнка',
'варёный',
'вёдро',
'всё',
'вёрткий',
'вёсны',
'вёсла',
'взлёт',
'влёт',
'вразлёт',
'подённый',
'подъём',
'позёмка',
'полёт',
'полётный',
'приём',
'приёмка',
'свёкор',
'сгущёнка',
'сгущёный',
'сёгун',
'сёдла',
'сёмга',
'съёмка',
'таёжный',
'телёнок',
'тёмный',
'трёхъярусный',
'трёхколёсный',
'трёхзвёздочный',
'утёс',
'шофёр',
'четвёртый',
'чёлка',
'чёрствый',
'чёрт',
'чёрточка',


'йота',
'йотация',
'йод',
'йогурт',
'йети',
'йеменцы',
'йельский',
'йог',
  ];

$out = [];
foreach($words as $w) {
  $out[$w] = Diacritic::getInstance()->translate($w); 
}
var_dump($out);



// результат работы:

array(48) {
  ["актёр"]=>
  string(12) "актиор"
  ["бёдра"]=>
  string(12) "биодра"
  ["берёза"]=>
  string(14) "бериоза"
  ["бурёнка"]=>
  string(16) "бурионка"
  ["варёный"]=>
  string(18) "варионыии"
  ["вёдро"]=>
  string(12) "виодро"
  ["всё"]=>
  string(8) "всио"
  ["вёрткий"]=>
  string(18) "виорткиии"
  ["вёсны"]=>
  string(12) "виосны"
  ["вёсла"]=>
  string(12) "виосла"
  ["взлёт"]=>
  string(12) "взлиот"
  ["влёт"]=>
  string(10) "влиот"
  ["вразлёт"]=>
  string(16) "вразлиот"
  ["подённый"]=>
  string(20) "подионныии"
  ["подъём"]=>
  string(14) "подъиом"
  ["позёмка"]=>
  string(16) "позиомка"
  ["полёт"]=>
  string(12) "полиот"
  ["полётный"]=>
  string(20) "полиотныии"
  ["приём"]=>
  string(12) "прииом"
  ["приёмка"]=>
  string(16) "прииомка"
  ["свёкор"]=>
  string(14) "свиокор"
  ["сгущёнка"]=>
  string(18) "сгущионка"
  ["сгущёный"]=>
  string(20) "сгущионыии"
  ["сёгун"]=>
  string(12) "сиогун"
  ["сёдла"]=>
  string(12) "сиодла"
  ["сёмга"]=>
  string(12) "сиомга"
  ["съёмка"]=>
  string(14) "съиомка"
  ["таёжный"]=>
  string(18) "таиожныии"
  ["телёнок"]=>
  string(16) "телионок"
  ["тёмный"]=>
  string(16) "тиомныии"
  ["трёхъярусный"]=>
  string(28) "триохъярусныии"
  ["трёхколёсный"]=>
  string(30) "триохколиосныии"
  ["трёхзвёздочный"]=>
  string(34) "триохзвиоздочныии"
  ["утёс"]=>
  string(10) "утиос"
  ["шофёр"]=>
  string(12) "шофиор"
  ["четвёртый"]=>
  string(22) "четвиортыии"
  ["чёлка"]=>
  string(12) "чиолка"
  ["чёрствый"]=>
  string(20) "чиорствыии"
  ["чёрт"]=>
  string(10) "чиорт"
  ["чёрточка"]=>
  string(18) "чиорточка"
  ["йота"]=>
  string(10) "ииота"
  ["йотация"]=>
  string(16) "ииотация"
  ["йод"]=>
  string(8) "ииод"
  ["йогурт"]=>
  string(14) "ииогурт"
  ["йети"]=>
  string(10) "ииети"
  ["йеменцы"]=>
  string(16) "ииеменцы"
  ["йельский"]=>
  string(20) "ииельскиии"
  ["йог"]=>
  string(8) "ииог"
}