@ComPUCKter
Web-разработчик

Почему когда аргумент «Привет» всё норм, а когда «Hello» появляется ошибка Argument #1 ($var) must be of type Countable|array, string given?

У меня есть определённая функция которая принимает текст и что-то с ним делает(не важно).
Когда текст русский, всё работает как надо, а когда передаю английский текст, выпадает ошибка, сообщающая о том, что count срабатывает только на countable|array. При чём, когда я пишу строкой выше echo is_array на ту же переменную, в обоих случаях он возвращает true

Сам код:

<?php
function revert_characters($str) // Привет! Давно не виделись.
{

   $words = explode(' ', $str); 
   $tags = array();
   for ($i = 0; $i < count($words); $i++) {
      $w = $words[$i];
      $w_arr = preg_split('##u', $w, -1, PREG_SPLIT_NO_EMPTY); 
      echo is_array($w_arr);  // тут всегда true
      for ($j = 0; $j < count($w_arr); $j++) { // тут ошибка если $str английский
         if (ctype_upper($w_arr[$j])) {
            $tags['uppercase'][$j] = $w_arr[$j];
            $w_arr = strtolower($w_arr[$j]);
         } elseif (ctype_punct($w_arr[$j])) {
            $tags['punct'][$j] = $w_arr[$j];
            unset($w_arr[$j]);
         }
      }

      $w_arr = array_reverse($w_arr);
      $rev_w = implode('', $w_arr);
      $words[$i] = $rev_w;
   }
   print_r($tags);

   $rev_str = implode(' ', $words);

   return $rev_str;
}
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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