2015-05-29 117 views
0

我試圖將一個90字符長的字符串拆分爲三個30長度的字符串。我不能簡單地將長字符串切成三行(最糟糕的情況),因爲字符串中的字詞會分裂。我已經試過代碼如下(但不工作),請幫助將字符串拆分爲新行

<?php 

error_reporting(E_ALL); 
ini_set("display_errors", 1); 

    $str = "test string more and more text very long string can be upto length of 90"; 
    $line1 = $line2 = $line3 = ""; 

    $temp = explode(" ", $str); 
    //var_dump($temp); 

    for($i=0; $i<count($temp); $i++){ 
     if(strlen($line1) < 30){ 
      $line1. = $temp[$i]." "; 

     }else if(strlen($line2) < 30) { 
      $line2. = $temp[$i]." "; 

     }else if(strlen($line3) < 30) { 
      $line2. = $temp[$i]." "; 

     } 
    } 

    //var_dump($line1); 
?> 

我試圖從$溫度儘可能在$ LINE1添加儘可能多的話,然後到$ 2號線....

+0

你能通過每30個字符的字符串循環,如果這個地方不是空間,向前或向後到最近的空間? –

+0

感謝reply..trying在代碼現在執行此 – kennyben

回答

2

通常情況下,我會說,這就是wordwrap功能是:(額外\n S於$wrapped是防止在不到3線制的殼錯誤)

$str = "test string more and more text very long string can be upto length of 90"; 
$wrapped = wordwrap($str, 30, "\n", true); 
list($line1, $line2, $line3) = explode("\n", $wrapped . "\n\n"); 

然而,你的問題有點不同。 wordwrap有時會製作第四行,而不是將它切成一半,這是您需要做的。 wordwrap將永遠只能做一個4行,如果切割字是必需的,所以也許嘗試這個辦法:

$str = "test string more and more terxt very long string can be upto length of 90 bla bla bla3rr33"; 
$maxLen = 30; 
$wrapped = wordwrap($str, $maxLen, "\n", true); 
list($line1, $line2, $line3, $line4) = explode("\n", $wrapped . "\n\n\n"); 
if ($line4 !== '') { 
    //fallback case: we have to split words in order to fit the string properly in 3 lines 
    list($line1, $line2, $line3) = array_map('trim', str_split($str, $maxLen)); 
} 

有一個不好的事情,這個代碼可以做的事:它有時會分裂兩個詞的時候,只需要拆一。如果你需要的話,我會讓你知道如何解決這個問題。

+0

OP應該使用這個。看起來這個功能已經有一段時間了,我從來沒有用過它。每天學些新東西。 –

+0

@奧斯汀:乾杯隊友你是冠軍! – kennyben

+0

@奧斯汀:不適用於字符串「$ str =」測試字符串越來越多terxt很長的字符串可以達到90的長度bla blarrrr33「;」在這種情況下,它應該砍掉$ str..i猜測,我將循環遍歷30個字符的字符串,並檢查wade所建議的空格 – kennyben

0

下面是一個替代方案,假設所有的單詞都用空格分隔。

$words = explode(" ", $string); 
$chunks = array_chunk($words, 30); 

foreach($chunks as $chunk) { 
    echo implode(" ", $chunk) . "\n\n\n";  
} 

我們利用explode()array_chunk()implode()按要求做。

Example


它的工作上面的方式如下:

  • 採取字符串,並將其分割成單詞的陣列(與分隔符是空的空間 - " "
  • 現在我們將array_chunkchunk)數組分成3個獨立的數組共30項。
  • 現在我們將遍歷該數組塊和implode()數組,使其再次具有相同的空格分隔符 - " "

和中提琴,你已經分割它,並根據你的願望分割字符串。

+0

抱歉,但由Wade提供的評論更有意義..只是試圖實現代碼。感謝您的回覆 – kennyben

+0

@kennyben以上將始終通過字符(*字*)正確分割它。看看[example](http://www.tehplayground.com/#DZFB0HeJW) – Darren

+0

是的,謝謝。但如果你讀到這個問題,這不是我們想要實現的。 – kennyben