Вывод определенного кол-ва слов
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