2012-05-04 4 views
5

Использование php: как я могу вставить разрыв строки в пробелы, который попадает в относительную середину строки? Или, другими словами, как мне подсчитать слова в предложении, а затем положить разрыв строки в предложении на полпути?Как добавить разрыв строки в средней точке строки, разделенной пробелами

Идея состоит в том, чтобы избежать вдов (заброшенных слов) во второй строке заголовков статей блога, по существу сокращая каждый заголовок пополам и помещая его на две строки, если заголовок занимает более одной строки.

Заранее спасибо.

Обновление: Привет всем Я понял, что мне нужна функция preg_split, чтобы разделить заголовок на пробелы. Извините, если эта часть не была ясна в вопросе. Я изменил ответ Асафа и использовал это:

$title_length = strlen($title); 
if($title_length > 30){ 
    $split = preg_split('/ /', $title, null, PREG_SPLIT_NO_EMPTY); 
    $split_at = ceil(count($split)/2); 
    echo $split_at; 
    $broken_title = ''; 
    $broken = false; 
    foreach($split as $word_pos => $word){ 
     if($word_pos == $split_at && $broken == false){ 
      $broken_title.= '<br />'."\n"; 
      $broken = true; 
     } 
     $broken_title .= $word." "; 
    } 
    $title = $broken_title; 
} 

Я новичок в SO и я сдулся силой общества. Приветствия.

+0

Вы хотите добавить разрыв строки в предложении в середине? –

+0

Привет, Давид. Любые пояснения помогут. Мне нужно сначала проверить длину статьи в блоге. Затем, если он большой, чтобы поместиться в одну строку, мне нужно поместить разрыв строки посередине. –

ответ

5

Используйте функцию PHP wordwrap(). Вы можете использовать длину вашей строки, деленную на 2 в качестве второго аргумента. Вот пример:

<?php 
$sentence = 'This is a long sentence that I would like to break up into smaller pieces.'; 
$width = strlen($sentence)/2; 
$wrapped = wordwrap($sentence, $width); 
echo $wrapped; 
?> 

Он выводит:

This is a long sentence that I would 
like to break up into smaller pieces. 

Если вы хотите вывод HTML, вы можете использовать дополнительный 3-й аргумент, чтобы определить символы разрыва. Как это:

$wrapped = wordwrap($sentence, $width, '<br />'); 
+1

Это похоже на то, что мне нужно. Выключить, чтобы попробовать. Спасибо. –

+0

@Asaph Это плохо, потому что он может сократить предложение в середине слова. –

+1

@ DavidBllanger Нет. Он не сломается посреди слов. Это точка функции ['wordwrap()') (http://php.net/manual/en/function.wordwrap.php). – Asaph

0

ОБНОВЛЕНО

<?php 
$Sentence = 'I will go to the school tomorrow if it is not raining outside and if David is ok with it.'; 
$Split = explode(' ', $Sentence); 

$SplitAt = 0; 
foreach($Split as $Word){ 
    $SplitAt+= strlen($Word)-1; 
    if($SplitAt >= strlen($Sentence)){ 
     break; 
    } 
} 

$NewSentence = wordwrap($Sentence, $SplitAt, '<br />' . PHP_EOL); 


echo $NewSentence; 
?> 

Производят это:

Я пойду в школу завтра, если это не < Бр/> \ п
дождь снаружи и если Дэвид в порядке с этим.

EDIT: Добавлен PHP_EOL, чтобы соответствовать все системы плюс HTML с < бр/>

+0

Вау Дэвид, спасибо. Я не очень хорошо знаком с регулярными выражениями, но это кажется действительно полезным. По какой-то причине я должен использовать этот подход вместо использования функции word_wrap()? –

+0

@BrandonBrown Извините, я отредактировал мое сообщение. Лучше пойти с word_wrap. Я видел, что это было для названия где-то, название будет иметь довольно много слова с пространством. –

+0

@BrandonBrown На самом деле это ['wordwrap()'] (http://php.net/manual/en/function.wordwrap.php), а не 'word_wrap()'. Я обновил свой ответ. Извините за опечатку изначально. – Asaph

Смежные вопросы