Почему php in_array() возвращает false, хотя должно true?

$gl = array('а', 'е', 'ё', 'и', 'о', 'у', 'ы', 'э', 'ю', 'я');
  $sogl = array('б', 'в', 'г', 'д', 'ж', 'з', 'й', 'к', 'л', 'м', 'н', 'п', 'р', 'с', 'т', 'ф', 'х', 'ц', 'ш', 'щ', 'ъ', 'ь', 'ч');
  $str = $_GET['str'];
  $str_array = str_split($str, 1);

  $gl_counter = 0;
  $sogl_counter = 0;

  foreach ($str_array as $current_letter) {
    if (in_array($current_letter, $gl)) {
      $gl_counter++;
    }
    if (in_array($current_letter, $sogl)) {
      $sogl_counter++;
    }
  }

echo $gl_counter;
  echo ", ";
  echo $sogl_counter;

В str_array у меня хранятся элементы массива, соответствующие каждой введенной букве в textarea. Затем, я хочу посчитать количество гласных и согласных букв в нем. Однако, счетчик не обновляется, потому что функция in_array всегда возвращает false. Однако же если заменить $current_letter на какую-то конкретную букву, например 'a', то тогда счетчик будет обновляться. Я пробовал вывести массив букв и он работает правильно (буквы выводятся). В чем проблема?


Ответы (1 шт):

Автор решения: Алексей Шиманский

Скорее всего вам надо использовать функцию mb_str_split для работы с многобайтовой строкой, которой является текст на русском. А str_split разбивает строку вот на такое:

введите сюда описание изображения

→ Ссылка