@0ldn0mad

Как посчитать русские буквы?

Добрый день.
Стоит задача подсчитать количество одинаковых букв в строке и выразить в процентном отношении - каких сколько.
Допустим, есть фраза "Когда Вам покажется, что цель недостижима, не изменяйте цель - изменяйте свой план действий. Конфуций". Регистром букв пренебрегаем.
Пробовал и count_chars и substr_count и strpbrk, но с русскими буквами везде проблемы.
Решил через массив прогнать (перед этим все буквы в нижний регистр + убрать все пробелы).
Но как теперь в массиве посчитать элементы с одинаковыми значениями? Как построить скрипт, который посчитает сколько значений "а" в массиве, сколько значений "б", "в" и т.д.?
  • Вопрос задан
  • 160 просмотров
Решения вопроса 1
wagoodoogoo
@wagoodoogoo
prestashop, webix, phalcon, vue, slim, craft cms
function mb_count_chars($input) {
    $l = mb_strlen($input, 'UTF-8');
    $unique = array();
    for($i = 0; $i < $l; $i++) {
        $char = mb_substr($input, $i, 1, 'UTF-8');
        if(!array_key_exists($char, $unique))
            $unique[$char] = 0;
        $unique[$char]++;
    }
    return $unique;
}

$input = "Когда Вам покажется, что цель недостижима, не изменяйте цель - изменяйте свой план действий. Конфуций";
print_r(mb_count_chars(preg_replace('/[^[:alnum:]]/u', '', mb_strtolower($input))) );
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
romanko_vn
@romanko_vn
$str = 'Когда Вам покажется, что цель недостижима, не изменяйте цель - изменяйте свой план действий. Конфуций';
$arr = preg_split('//u', mb_strtolower($str), 0, PREG_SPLIT_NO_EMPTY);
$arr_format = preg_grep("/\w/u", $arr);
$arr_count = array_count_values($arr_format);
arsort($arr_count);
print_r($arr_count);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы