@apaicer

Как подсчитать количество слов одинаковой длины?

Добрый вечер. Нужно написать функцию, которая считает количество слов в предложении и букв в слове.
Например: я иду в кино, кто со мной? (1-2, 2-1, 3-2, и тд) т.е. по 1 символу 2 слова (я,в), по 3 символа 2 слова(иду, кто) и в таком ключе.
Нашел некоторый код:
$Str  = "Шел дождь, автобус мокрый, все спят, или не все";
$pieces = explode(" ", $Str);
foreach($pieces as $val)
$pos[$val] = substr_count($Str, $val);
foreach($pos as $key => $cal)
{
echo "Кол-во повторений: $key = $cal<br>";
}

Он считает количество повторений, но не складывает слова с одинаковой длинной букв. Я понимаю, что для этого нужен цикл. Можете объяснить, куда вставить, как это должно работать? Не врубаюсь.
  • Вопрос задан
  • 185 просмотров
Пригласить эксперта
Ответы на вопрос 2
@mykolaim
PHP developer
function wordsCounter(string $text)
{
 $text = str_replace(["!","...","?"],".",$text);// приводим окончания предложений к одному формату
 $text = str_replace([",","-"],"",$text); // чистим текст от знаков кроме .
 $sentances = explode(".",$text);
 $result = [];

 foreach($sentances as $sentance)
 {
     $words = explode(" ", $sentance);
     
     foreach ($words as $word)
     {
         $length = mb_strlen($word);         
         if(empty($result[$length]))
             $result[$length] = 1;
         else
           $result[$length] += 1;
     }
 }
    return $result;                
}
   $text = "я иду в кино, кто со мной?";
   print_r(wordsCounter($text));
Ответ написан
Комментировать
@zhainar
Гуглю за вас
$input = <<<EOL
Добрый вечер. Нужно написать функцию, которая считает количество слов в предложении и букв в слове.
Например: я иду в кино, кто со мной? (1-2, 2-1, 3-2, и тд) т.е. по 1 символу 2 слова (я,в), по 3 символа 2 слова(иду, кто) и в таком ключе. 
Нашел некоторый код:
EOL;

$input = str_replace(["\n", "\r"], ' ', $input);
$words = explode(' ', $input);

$len = [];
$reg = '/^[^А-Яа-я]*([А-Яа-я]|[А-Яа-я]+.*[А-Яа-я]+)[^А-Яа-я]*$/';

$callback = function(array $m) use (&$len)
{
	$length = mb_strlen($m[1]);
	$len[$length][] = $m[1];
	return '';
};

$words = preg_replace_callback($reg, $callback, $words);

var_dump($len);


Такие задания лучше самому делать.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
26 апр. 2024, в 09:18
500 руб./в час
26 апр. 2024, в 06:46
1500 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект