Как вычислить английские буквы в русских словах и наоборот?

sasha_ua

Постоялец
Регистрация
22 Июн 2010
Сообщения
66
Реакции
0
Имеется массив:

PHP:
$array = array("Волга","Дом","Барабан","Aрбуз");

Если его отсортировать, то результат будет следующим:

1.Барабан
2.Волга
3.Дом
4.Арбуз

В слове арбуз буква 'A' набрана в английской раскладке, и следовательно сортировка выполняется неправильно.

Как бороться с данной проблемой?
 
Регулярками ищешь вхождения латиницы
 
Напрашивается вариант: предварительно заменить все латинские буквы, похожие по начертанию, на русские :)
Вот готовая реализация на php:
 
Дело в том что слова на 2х языках то на англ. то на русском.
Т.е. нужно определить сначала к какому языку относится слово.

Я так понимаю слово нужно перебирать посимвольно и проверять на попадание в определенный промежуток.
Потом посчитать в каком соотношении рус и англ символы и сделать вывод во что конвертировать.

Я не сильно ориентируюсь в кодировках, но может можно как-то получать код utf символа и таким образом определять к какому языку он относится?

Регулярками ищешь вхождения латиницы
Что-то типа [a-zA-Z]?
Но как наоборот рус->eng, разве есть [а-яА-Я]? Или нужно перечислить [абвг...яАБВГ...Я]
 
есть [а-яА-Я]

+ не нужен код utf , в ASCI-коды символов тоже отличаются ( ord() )
 
PHP:
<?php
$array = array("Rука","Dом","Sобака","Aрбуз");
	$ru = array('А','Д','С','Р');
	$en = array('A','D','S','R');
for($i=0; $i<count($array); $i++) $array[$i] = str_replace($en, $ru, $array[$i]);
sort($array);
print_r ($array); //Array ( [0] => Арбуз [1] => Дом [2] => Рука [3] => Собака )
?>
PS. Может, есть способы и проще…
 
вместо цикла можно использовать
PHP:
$arr_replace=array("А"=>"A","В"=>"B","С"=>"C");
echo strtr($text,$arr_replace);
 
вместо цикла можно использовать
PHP:
$arr_replace=array("А"=>"A","В"=>"B","С"=>"C");
echo strtr($text,$arr_replace);
Цикл появился, из-за обработки массива $array . В вашем же примере обрабатывается, текстовая строка.
А так, принцип тот же
PHP:
$array = array("Rука","Dом","Sобака","Aрбуз");
$arr_replace=array("A"=>"А","D"=>"Д","S"=>"С","R"=>"Р"); 
for($i=0; $i<count($array); $i++) $array[$i] = strtr($array[$i],$arr_replace); 
sort($array);
print_r ($array); //Array ( [0] => Арбуз [1] => Дом [2] => Рука [3] => Собака )
 
Назад
Сверху