| |
|
|
| | Имеется массив с текстом, нужно какимто образом пребрать все элементы массива через цикл, перебирая через цикл,
подсчитывать текст при помощи strlen() как только будет 30 символов так цикл останавливать. Я пробывал как мог
но ничего неполучается, тут думаю наверное нужно через рекурсию делать, но я даже незнаю как можно сделать
$text = '<p>Текст текст текст текст</p><p>Текст текст текст текст текст текст</p><p>Текст текст текст текст</p>';
preg_match('~(<p>(.*?)</p>){,2}~', $text , $matches);
[php]
for($i=0; $i<count($matches); $i++){
$contents_arr[] .= $matches[$i];
if(strlen($contents_arr[$i]) < 35){
$contents = $contents_arr[$i];
}else{
$contents = $contents_arr[$i];
}
}
echo $contents;
[/php] | |
| |
|
|
| |
|
|
| |
для: Terri
(15.05.2006 в 16:59)
| | | Если я правильно понял вашу истинную задачу (а почему я должен кстати гадать ?!), то вам нужно сделать просто так:
<?php
$n = 30;
$text = '<p>Текст текст текст текст</p><p>Текст текст текст текст текст текст</p><p>Текст текст текст текст</p>';
preg_match_all("|<p>(.*?)</p>|", $text , $matches);
$text = implode("", $matches[1]);
$text = substr($text, 0, $n);
echo $text;
?>
|
Заметьте, регулярное выражение у вас тоже было немного неправильно написано. | |
| |
|
|
| |
|
|
| |
для: DDK
(15.05.2006 в 18:38)
| | | не совсем так
нужно так чтобы самом конце был последний тег </p>, не просто обрезан и незакончен текст(параграф)
вы уж извините меня, за моё непонятное объяснение, нужно как, брать текст из каждого элемента пока не наберем нужное кол-во символов - как набрали - докопируем текущий абзац (на котором набралось допустим 300 символов) и все.
Т.е. представь скопировали 2 абзаца, в середине 3-его у нас набралось допустим 300 символов, мы берем все 3 абзаца. А остальные 4, 5 и т.д. не берем. Таким образом получаем законченный текст и плюс разнабой длинны
я заранее все абзаци поместил в массив, тоесть один абзац это один элемент массива
$matches['<p>Текст1 текст1 текст1 текст1</p><p>Текст2 текст2 текст2</p>'];
$matches['<p>Текст2 текст2 текст2 текст2 текст2 текст2</p>'];
$matches['<p>Текст3 текст3 текст3 текст3</p>']; | |
| |
|
|
| |
|
|
| |
для: Terri
(15.05.2006 в 18:55)
| | | Вот теперь более понятна суть задачи :) Тогда поступаем так:
<?php
$maxlen = 30;
$text = '<p>Текст текст текст текст</p><p>Текст текст текст текст текст текст</p><p>Текст текст текст текст</p>';
preg_match_all("|<p>(.*?)</p>|", $text , $matches);
$output = "";
for($i=0; $i<count($matches[0]); $i++) {
$output .= $matches[0][$i];
if(strlen($output) >= $maxlen) break;
}
echo $output;
?>
|
| |
| |
|
|