Я работаю над текстом в арабском стиле. Есть массив $word = array();
,
Он хранит некоторые арабские словаlim', 'ali', 'kefrâ', 'lîm'
,
Вы видите, что у какого-то слова есть шляпы (мы называем их так). Я пытаюсь посчитать каждое слово методом array_count_values($word);
Однако это видит lim
а также lîm
как два разных слова. Следует считать их одним. Есть ли другой метод для этого? Что я могу сделать? Благодарю.
Вы можете написать специальную функцию, которая конвертирует символы «со шляпами» в строку в символы без таковых. Есть пример (слова на польском языке, но принцип точно такой же):
<?php
$word = array('źrebię', 'łódź', 'wiazanka', 'lodź', 'wiązanka');
$result = array_count_values($word);
var_dump($result); //its wrong answer
$wordConverted = array();
foreach($word as $element)
{
$wordConverted[] = transformSpecialChars($element);
}
var_dump(array_count_values($wordConverted)); //count correctlyfunction transformSpecialChars($string)
{
$replaceFrom = array('ą', 'ę', 'ź', 'ż', 'ł', 'ó');
$replaceTo = array('a', 'e', 'z', 'z', 'l', 'o');
return str_replace($replaceFrom, $replaceTo, $string);
}
И результат обоих var_dump
s:
// WRONG
array(5) {
["źrebię"]=>
int(1)
["łódź"]=>
int(1)
["wiazanka"]=>
int(1)
["lodź"]=>
int(1)
["wiązanka"]=>
int(1)
}
// SEEMS FINE
array(3) {
["zrebie"]=>
int(1)
["lodz"]=>
int(2)
["wiazanka"]=>
int(2)
}
Конечно, вы должны подходить для массивов, используемых для преобразования ($replaceFrom
а также $replaceTo
) для ваших нужд.
Других решений пока нет …