Ich versuche, eine Transliterationsfunktion zu bearbeiten, um eine spezielle Bedingung zu erfüllen. Ich benutze ein Russisch in Latein Transliteration, die ich für Bulgarisch angepasst habe, aber es gibt die besondere Bedingung, dass, wenn der Buchstabe "я", normalerweise als "ya" transkribiert, am Ende eines Wortes gefunden wird, und wenn der Buchstabe "Ø", wird es als "a" transkribiert.PHP array_replace auf speziellen Zustand (erweiterte Transliteration)
Beispiel: Ohne die besondere Bedingung wird "мистерия" als "misteriya" transkribiert, während die korrekte Transliteration (nach dem bulgarischen Transliterationsgesetz) "misteria" ist.
Was ich versucht habe:
- Split die Quellzeichenfolge in Worte zu fassen.
- Überprüfen Sie, ob das Wort länger als 2 Zeichen ist.
- Überprüfen Sie, ob der letzte Buchstabe "я" ist.
- Überprüfen Sie, ob der Buchstabe davor "Ø" ist.
- Wenn alle oben genannten Bedingungen erfüllt sind, ersetzen Sie die Werte für "я" und "Я" (Groß- und Kleinbuchstaben) im Umwandlungsdiagramm-Array durch ihre neuen Werte.
- Verketten Sie alle konvertierten Wörter in eine Zeichenfolge und geben Sie sie aus.
Es funktioniert nicht.
function transliterator($string) { $converter = array( 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'ts', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sht', 'ь' => '', 'ъ' => 'a', 'ю' => 'yu', 'я' => 'ya', 'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ж' => 'Zh', 'З' => 'Z', 'И' => 'I', 'Й' => 'Y', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'Ts', 'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sht', 'Ь' => '', 'Ъ' => 'A', 'Ю' => 'Yu', 'Я' => 'Ya', ); $words = explode(" ", $string); $trans_string = ""; foreach($words as $word) { if((strlen($word > 2)) && (strpos($word, "я", -1)) && (strpos($word, "и", -2))) { $amend = array("я" => "a", "Я" => "A"); $converter = array_replace($converter, $amend); } $trans_word = strtr($word, $converter); $trans_string .= $trans_word." "; } return $trans_string; }
Einige bitte helfen?
zeigen den Eingang '$ string' Inhalt – RomanPerekhrest
ich würde' substr ($ Wort, -2) == ‚ия'' statt' strpos'. konnte es aber wegen Zeichensatz wahrscheinlich nicht zum Laufen bringen. – RST
Es ist nicht die array_merge, die nicht funktioniert, es ist die if-Bedingung – RST