В чём ошибка? [php]
Этот код должен возвращать сходство слов $w0 и $w1, за совпадение букв в одной и той же позиции он прибавляет 2 балла, за одинаковые буквы, но в разных позициях - 1балл. Но вместо 5*2 баллов он возвращает 20 баллов. Почему?
function b($w0,$w1,$y=2,$w=1){//Кол-во баллов совпадения у $w0 и $w1
$i=0;
$b=0;
while($i<strlen($w0)){/*слова должны быть одинаковой длины*/
if($w0[$i]==$w1[$i]){
$b+=$y;
}
else if(r($w1,$w0[$i])){
$b+=$w;
}
$i++;
}
return $b;
}
echo b("слово","слово",2,1);//20 баллов, а не 10 баллов.
Ответы (1 шт):
Автор решения: RAMe0
→ Ссылка
Если по простому, для работы с кирилицей (или с другими юникод символами) нужно использовать мультибайт методы.
В вашем случае, вместо strlen() нужно использовть mb_strlen().
Для примера:
echo "mb_strlen: ".mb_strlen("слово")."\n";
echo "strlen: ".strlen("слово")."\n";
Output:
mb_strlen: 5
strlen: 10
Сответую ознакомиться с документацией по строковому типу PHP, в частности последний раздел Подробности реализации строкового типа.