Как разбить текст на 3 части? PHP

seosniks
На сайте с 13.08.2007
Offline
389
11725

Уважаемые знатоки! Имею задачу и незнаю ответа.

Есть текст в переменной

$text="

строка один

строка 2

строка 3

строка 4

строка 5000";

как разбить текст чтоб

$text[0];//строка 1 попала cюда

$text[1];//строка 2 попала cюда

$text[2];//строка 3 по 10 попала cюда

$text[3];//строка 4-5000 попала cюда

Тоесть строк может быть разное количество.

explode("\n");//Разбивает на много строчек.

По этому надо разбить как то по другому.

Или же разбить как то еще, по количеству слов к примеру

или знаков..

Может кто знает как и с чем играться. Повторяю привязки в тексте нет за исключением переноса строки или пробела.

DyaDya
На сайте с 11.04.2007
Offline
147
#1

Ну вы сами для себя определите, что будет критерием разбития строки.

explode("\n"); очень хорошее решение. Просто потом полученный массив можете обработать по своему усмотрению. В каждой строке можете посчитать слова и если слов меньше определённого значений, то объединить со следующей строкой и т.п.

Всё в ваших руках.

Возможные критерии:

1. Количество слов

2. Количество предложений

3. Длина строки

ну типа того.

Выбирайте качественный хостинг (http://vashmaster.ru/informaciya/o_poleznyh_programmah/news83.php) и продвигайте сайты в СЕОПУЛЬТ (http://seopult.ru/ref.php?ref=72b5ed9561fe66a1). А на «SAPE» я в обиде :) Не упрекайте за очепятки, пишу вслепую (http://ergosolo.ru/) и также делаю сайты (http://www.vashmaster.ru/) ;)
gl_SPICE
На сайте с 28.08.2006
Offline
53
#2

Считайте количество знаков, и если оно больше определенного количества, то продолжайте считать до следующей точки, восклицательного или вопросительного знака, и на этом обрубайте. Надеюсь, я верно понял задачу :)

Товаровед.инфо — помощь в выборе качественных товаров и услуг (http://www.tovaroved.info/)
ArtInt
На сайте с 28.02.2007
Offline
61
#3

А почему в вашем примере текст разбит на 4 части? :)


$text[0];//строка 1 попала cюда
$text[1];//строка 2 попала cюда
$text[2];//строка 3 по 10 попала cюда
$text[3];//строка 4-5000 попала cюда

Если нужно разбить текст на 3 части с примерно равным количеством непустых строк, можно так попробовать


$parts_count = 3;
$text = preg_replace("/\r|\n{2,}/", "", trim($text)); // убираем пустые строки
$text = array_chunk(explode("\n", $text), $parts_count); // разбиваем массив на $parts_count равных частей
$parts = array();
for ($i = 0; $i < $parts_count; $i++) { // собираем разделённые строки в части текста
$parts[] = join("\n", $text[$i]);
}

var_dump(($parts));
Fiat lux!
seosniks
На сайте с 13.08.2007
Offline
389
#4
ArtInt:
А почему в вашем примере текст разбит на 4 части? :)

Если нужно разбить текст на 3 части с примерно равным количеством непустых строк, можно так попробовать

$parts_count = 3;
$text = preg_replace("/\r|\n{2,}/", "", trim($text)); // убираем пустые строки
$text = array_chunk(explode("\n", $text), $parts_count); // разбиваем массив на $parts_count равных частей
$parts = array();
for ($i = 0; $i < $parts_count; $i++) { // собираем разделённые строки в части текста
$parts[] = join("\n", $text[$i]);
}

var_dump(($parts));

Уважаемый ArtInt.

Данная конструкция работает но показывает не весь текст

Если добавить значение $parts_count = 3; больше

то выходит ошибка.

Самые удобные наверное будут варианты

1. Количество слов

или

2. Количество предложений

Как предложил DyaDya .

Если делать по точке(Предложению) Опять же получиться

массив с кучей значений.

Самое простое наверное разбить точкой.

Даже можно разбить на 2 части текст.

Но разбить так чтобы часть 1 имела N строк. А 2 часть все остальное.

Скажу еще проще мне надо Создать анонс статьи .

Чтобы скрипт автоматически разбил текст взяв первые 2-4 строки для анонса.

А все остальное попало в другую переменну.

seosniks добавил 07.10.2008 в 12:26

В общем нашел самое простое решение


$text="Здесь текст который разбить надо";
$tex = substr("$text",10, 11 ); //пропускаем 10 знаков и берем 11 знак
$text= str_replace("$tex","$tex <!--Разделитель-->", $text);//11 знак заменяем на 11 знак+ разделитель
echo $text ;

результат работы

Здесь текст который р<!--Разделитель-->азбить надо
ъ

токлько как сделать чтоб не рвать слова.

На странице в принципе не видно разрыва.

:D

Serg_pnz
На сайте с 05.03.2008
Offline
117
#5

Предлагаю такой вариант:

1. explode по \n

2. сколько нужно заносим в анонс (предположим первых три элемента)

3. убиваем из массива полученного в п.1 элементы с id=0, 1, 2 (тут еще надо поставить условие на проверку существования массива, дабы избежать ошибок, если текст короткий.)

4. оставшееся в массиве объеденяем по implode

По словам труднее сделать, поскольку если бить по пробелам... а вдруг разрыв попадет на тег?

Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
seosniks
На сайте с 13.08.2007
Offline
389
#6
Serg_pnz:
Предлагаю такой вариант:
1. explode по \n
2. сколько нужно заносим в анонс (предположим первых три элемента)
3. убиваем из массива полученного в п.1 элементы с id=0, 1, 2 (тут еще надо поставить условие на проверку существования массива, дабы избежать ошибок, если текст короткий.)
4. оставшееся в массиве объеденяем по implode

По словам труднее сделать, поскольку если бить по пробелам... а вдруг разрыв попадет на тег?

Собственно я думал об этом так как вывести все строки в масив проще всего.

Но я так и не допер как

например весь массиив имеет

(array[0]

[0] => строка 1

[1] => строка 2

[2] => строка 3

[3] => строка 4

[4] => строка 5

[5] => строка 6

и так до конца текста

)

Но нам как то надо

нам надо из него взять первые три или 4 строки

А остальные загнать в array[1] объеденить .

1. explode по \n

2. сколько нужно заносим в анонс (предположим первых три элемента)

3. убиваем из массива полученного в п.1 элементы с id=0, 1, 2

Вот здесь мне не ясно как убить, проверить и объеденить

4. объеденяем по implode это понятно

В принципе первые три строки

(array[0]

[0] => строка 1

[1] => строка 2

[2] => строка 3

Считываем элементарно. Но вот как все остальное объеденить .

Ведь это будет уже

4 значение массива.

Хотя на крайний случай я сделал вариант.Хотя он и не идеален. Но зато работает на все 100

LA
На сайте с 03.06.2008
Offline
105
#7


$str = 'строка один
строка 2
строка 3
строка 4
строка 5000';

$str_array = explode("\n", str_replace("\r", '', $str));
$str_array_new = array();

for ($i = 0; $i < 3; $i++) {
$str_array_new[$i] = $str_array[$i];
}

unset($str_array[0], $str_array[1], $str_array[2]);
$str_array_new[3] = implode("\n", $str_array);
dvaes
На сайте с 03.09.2007
Offline
65
#8

есть забавная функция wordwrap. вот она подойдет для разрыва по ко-ву букв. из минусов - анонс не по предложениям, а из плюсов - все анонсы примерно одной длины)

выглядить, наверн, будет примерно так


$text = "текст статьи";

$arr = explode("*{РАЗРЫВ}*", wordwrap($text, 100, "*{РАЗРЫВ}*"), 2);
$anonse_text = $arr[0] . "... <a...>читать далее</a>";

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий