|
|
|
| Продолжаю выполнять задачи из книги авторов сайта. В данном случае задача 5.3 на странице 158. Нужно подсчитать, сколько в тексте содержится одно-, двух-, ... десятибуквенных слов.
Вот мое решение, но я не могу сообразить два момента:
1. Можно ли оптимизировать вывод результатов работы функции?
2. Если задается большее количество символов в слове в качестве 2-го аргумента функции чем имеется в наличии, то выводится сообщение об ошибке. Как бы перехватить эту ошибку?
Вот мой код:
$str = 'Проект, задуманный как «дом для отдыха в естественной обстановке»,
представляет небольшой двухэтажный прямоугольник (5,85х7 м) со скатной кровлей,
позволяющий в полной мере насладиться окружающим видом на горы. В общем-то простой и
небольшой дом получился довольно гармоничным, заметным и современным.';
$musor = array(",", ".", "'", "\"", "«", "»", "(", ")");
$str = str_replace($musor, "", $str);
$words = explode(" ", $str);
$wc = array();
$num;
function counterwords($w, $y)
{
foreach($w as $val)
{
for($i=0; $i<count($val); $i++)
{
if(mb_strlen($val) == $y)
{
$num++;
$wc[] = $val;
}
}
}
$mywords = implode(", ", $wc);
return "<b>" .$mywords. "</b><br>Количество слов: " .$num. "<br><br>";
}
echo "Однобуквенные слова: " .counterwords($words, 1);
echo "Двухбуквенные слова: " .counterwords($words, 2);
echo "Трехбуквенные слова: " .counterwords($words, 3);
echo "Четырехбуквенные слова: " .counterwords($words, 4);
echo "Пятибуквенные слова: " .counterwords($words, 5);
echo "Шестибуквенные слова: " .counterwords($words, 6);
echo "Семибуквенные слова: " .counterwords($words, 7);
echo "Восьмибуквенные слова: " .counterwords($words, 8);
echo "Девятибуквенные слова: " .counterwords($words, 9);
echo "Десятибуквенные слова: " .counterwords($words, 10);
|
| |
|
|