Сокращение строки по словам

igortik

Новичок
Сокращение строки по словам

Подскажите, пожалуйста, как сократить строку не по символам (что делает substr), а по словам, к примеру, сократить предложение "Попробуйте эти спелые яблоки" до "Попробуйте эти спелые", т.е. записать в переменную лишь первые 3 слова.
 

Фанат

oncle terrible
Команда форума
для этого ты должен сначала определить понятие "слово", причем так, чтобы это было понятно php.
 

kruglov

Новичок
p.s. Что делать со строками
"попробуйте яблоки, спелые, вкусные"
"попробуйте спелые яблоки-антоновку"
?
 

igortik

Новичок
kruglov
В этом случае "попробуйте яблоки, спелые, вкусные" сокращение строки на до первых 3 слов будет:

"попробуйте яблоки, спелые,"

В этом случае "попробуйте спелые яблоки-антоновку" сокращение строки на до первых 3 слов будет:

"попробуйте спелые яблоки-антоновку"

-~{}~ 28.10.07 23:49:

т.е. каждое слово новое будет начинаться после пробела.

Цель - реализовать человеческое сокращение строки по словам, а не по кол-ву знаков, как это делает substr

-~{}~ 28.10.07 23:49:

kruglov
нет, на php
 

kruglov

Новичок
igortik
а если "яблоки (тут 10 пробелов) антоновка"?

Вообще, копайте в сторону php-функций, содержащих слово "split" и их "родственников" (see also)

-~{}~ 28.10.07 23:50:

igortik
Тогда раздел надо другой выбирать было.
 

igortik

Новичок
Заклинание:

PHP:
while ($row = mysql_fetch_array($result))
	{
	$id = $row["id"];
	$name = $row["name"];
	$array_name = spliti (" ", $name, 5);
	$show_name = $array_name[0]." ".$array_name[1]." ".$array_name[2]." ".$array_name[3]." ".$array_name[4];
}
:)
 

Beavis

Banned
разбей строку на массив слов и бери первые N элементов для выбора N первых слов... только надо предусмотреть удаление лишних пробелов
 

igortik

Новичок
Beavis
хм, у меня прекрасно работает.

Почему не может работать, если я в переменную заношу элементы массива, соединяя их и разделяя каждый пробелом.
 

Beavis

Banned
код:
PHP:
    $name = "слово1  слово2, слово3 , слово4, слово5   слово6  sdf sdfs";
    $array_name = spliti (" ", $name, 5); 
    $show_name = $array_name[0]." ".$array_name[1]." ".$array_name[2]." ".$array_name[3]." ".$array_name[4]; 
    print_r($array_name);
    print_r($show_name);
результат:
PHP:
Array
(
    [0] => слово1
    [1] => 
    [2] => слово2,
    [3] => слово3
    [4] => , слово4, слово5   слово6  sdf sdfs
)
слово1  слово2, слово3 , слово4, слово5   слово6  sdf sdfs
 

igortik

Новичок
почему [4] вышел таким?
у нас же пробел стоит после ","

-~{}~ 29.10.07 00:36:

а .. понял, т.е. мне надо выводить не первые 5, а первые 4 элемента?
 

Beavis

Banned
igortik
ну во первых объясни зачем ты используешь ф-цию spliti а не split ?

во вторых покажи где у тебя контролируется ситуация когда идут несколько пробелов вподряд или если до знака препинания стоит пробел и после него пробел...

и наконец, если ты ставишь в разбиении строки в массив лимит, то в последнем элементе будет весь остаток неразбитой строки
 

igortik

Новичок
Beavis
1) Не смог разобраться с split: http://ru2.php.net/manual/ru/function.split.php :(

2) Не контролируется, разве что могу заменить двойной пробел str_replace

3) Это ясно, спасибо, уже разобрался
 

WP

^_^
PHP:
$str = "слово1  яблоки-антоновка, слово5   слово6  sdf sdfs"; 
preg_match('~(?:(\W+|\b)[\w\-]+\b){0,3}~',$str,$m);
echo $m[0];
// слово1  яблоки-антоновка, слово5
Остальные предложенные варианты можно отправить сразу фтопку :)
 

Фанат

oncle terrible
Команда форума
WP
если у него локаль стоит неправильная, то твой вариант в топку
 

igortik

Новичок
да, что-то оно не то :(

Из 2х- значений $str не вышло ничего путного, к примеру:

"Биндеры 51мм BM.5301" как был таким так и остался.
"Деревянный настольный набор, цвет: красное дерево (пк)" - это вообще возвращает пустую строку
 

ustas

Элекомист №1
*****
Что мешает поставить нормальную локаль, речь ведь не о домохозяйках?
 
Сверху