Вывод определенного кол-ва слов

1. Мага (27.08.2012 / 23:01)
Задача - из переменной, содержащей текст длиной, допустим, 500 слов, вывести 200 слов. Как?

2. iNeeXT (27.08.2012 / 23:12)
Функция str_word_count()
мануал

3. Мага (27.08.2012 / 23:18)
Как слова считать я в курсе) а вот как вывести определенное их количество...

4. Иван (27.08.2012 / 23:31)
можно так:
$string="test test test test test";
$arr=split(" ",$string);
for($i=0;$i<200;$i++)
{
	echo $arr[$i];
}


5. Мага (27.08.2012 / 23:34)
Был такой вариант, грузит неслабо даже на локалке.

6. Иван (28.08.2012 / 01:37)
ну эт да,грузить будет

7. Кевин Митник (28.08.2012 / 01:46)
не заморачивайся над словами, работай с количеством символов)

8. Петр (28.08.2012 / 07:19)
Встроенной функции похоже для этого нет. Можно написать как-нибудь так:
<?php
for($last=$i=0; ($last=strpos(' ',$str,$last+1)!==false)&&($i!=200); $i++);
echo substr($str, 0, $last);
?>


9. Мага (28.08.2012 / 09:17)
Пустоту выводит...

10. Петр (28.08.2012 / 09:25)
Другой порядок аргументов :-(
($last=strpos($str, ' ', $last+1))


11. Мага (28.08.2012 / 10:58)
Выводит только первый символ

12. Михаил (28.08.2012 / 11:01)
Может проще символы обрезать?

Добавлено через 04:16 сек.
$words = split(" ",$string);
$words = array_slice($words , 0, 200);
$string200 = join(" ", words);

13. Петр (28.08.2012 / 12:41)
11. WolfEYE, странно, у меня все работает. Вероятно, проблема в том, что число слов меньше 200. Тогда нужно несколько изменить код:
 <?php 
for($last=$i=0; ($i!=200)&&($last=strpos($str, ' ', $last+1)); $i++);
$last || $last=strlen($str);
echo substr($str, 0, $last);
?>


14. Серега (28.08.2012 / 13:10)
обрезание строки по количеству слов:
function cut_string($string,$n) {
	if (empty($string)) return FALSE;
	$str = explode(' ',$string);
	if (count($str)<=1) return $string;
		else {
			$i = 0;
			$newstring = '';
			while ($i<$n) {
				if (empty($str[$i])) break;
				$newstring = $newstring.' '.$str[$i];
				$i++;
			}
			return $newstring;
		}
}

насчет нагрузки на сервер не знаю)

15. Петр (28.08.2012 / 13:39)
Если уж использовать массивы, то хотя бы так - $arr=explode(' ', $str, 201); unset($arr[200]);

16. Михаил (28.08.2012 / 13:47)
Im-ieee (28 Августа 2012 / 13:39)
Если уж использовать массивы, то хотя бы так - $arr=explode(' ', $str, 201); unset($arr[200]);
Тогда уж $arr=explode(' ', $str, 200); без unset, тем более слов может оказаться меньше 200

17. Петр (28.08.2012 / 13:58)
16. Flyd, explode помещает оставшуюся строку в последний элемент массива, его нужно удалить. Если число слов меньше, то такого элемента просто не будет.

18. Михаил (28.08.2012 / 15:14)
не знал. Но всё равно проверка по-моему не помешает есть ли 201й элемент

19. Кевин Митник (28.08.2012 / 17:55)
<?php
$text="тут должно быть не менее 200 слов через пробел";
$text = explode(" ",$text);
$i = 0;
while($i!=200)
{
echo $text[$i]."<br>";
$i++;
}  
?> 

Добавлено через 00:47 сек.
вывод работает, нагрузки нет

Добавлено через 03:14 сек.

<?php
function do_except($string, $word_limit) {
$words = explode(' ', $string, ($word_limit + 1));
if (count($words) > $word_limit)
array_pop($words);
echo implode(' ', $words).' ...';
}

?> 

Добавлено через 06:01 сек.
этот вообще куколка)

20. Петр (28.08.2012 / 19:18)
18. Flyd, это тоже лишнее. При удалении никаких ошибок не возникает, даже E_NOTICE.

21. shilo (29.08.2012 / 03:58)
19, помоему самый логически правильный вариант.

22. YeachAgBitch (29.08.2012 / 06:38)
substr(); не?

Добавлено через 00:34 сек.
аааа. не. не пойдет. не внимательно сабж прочитал.

23. Мага (29.08.2012 / 10:33)
19. Кевин Митник_HHTeam, что-то я с использованием последнего кода не разобрался. Как?

24. shilo (29.08.2012 / 13:31)
23, Если функция рабочая, то:
<?php
function do_except($string, $word_limit) { 
$words = explode(' ', $string, ($word_limit + 1)); 
if (count($words) > $word_limit) 
array_pop($words); 
echo implode(' ', $words).' ...'; 
}
echo do_except('много много много слов', 200);
?>


25. Кевин Митник (29.08.2012 / 18:03)
#24 верно)

URL: https://visavi.net/topics/34191