2010-09-06 15 views
0

如果字符串大於50個字符長,我需要分裂它。 允許的最大數量是3塊50塊。它可能少於50塊,但從不超過150塊。 我不需要添加任何特殊字符或作爲「分離器」。我可以在任何地方打破字符串,沒問題,因爲這個建議並不是向用戶顯示它。將長串分成小段。 - 試圖找到一個優雅的方式這樣做

if (strlen($street) > 50) 
{ 
    $streetPart1 = substr($street,0,50); 
    $streetPart2 = substr($street,51,100); 
    $streetPart3 = substr($street,101,150); 
} 

有沒有更好的方法來做到這一點?

UPDATE:

的下一步會到達一個例子:

if (strlen($street) > 50) 
{ 
    $streetPart1 = substr($street,0,50); 

    $streetPart2 = substr($street,51,100); 

    $streetPart3 = substr($street,101,150); 

    if(!empty($streetPart2) && empty($streetPart3) 
    { 
     //add part2 only. 
    }elseif(!empty($streetPart2 && !empty($streetPart3)) 
    { 
    //add part 2 and part 3 
    } 
} 

非常感謝。 MEM

+0

我在這裏有很多重複。 :(我覺得需要看到好的代碼,除了我自己的壞代碼:s – MEM 2010-09-06 14:49:31

回答

4

你可能只是使用str_split

$parts = str_split($string, 50); 

// if you want to have vars instead of array: 
list($part1, $part2, $part3) = str_split($string, 50); 
+0

使用可選的塊長度參數,這是非常實用的。 – erisco 2010-09-06 15:07:13

+0

@nikic - 我看到...並通過尋找接下來需要做什麼,僅添加第2部分或添加第2部分和第3部分,這是一個正確的方法嗎? (是的...這是另一個問題......但它是如此相關...... :)) – MEM 2010-09-06 15:13:04

+0

由於你的規範限制了塊的數量爲三個,我發現它很清楚有三個單獨的變量。當你需要動態長度或有很多項目時,陣列往往成爲更清晰的解決方案。 – erisco 2010-09-06 15:18:11

1

檢查PHP的wordwrap()函數。

http://php.net/manual/en/function.wordwrap.php

並檢查了explode()功能

http://php.net/manual/en/function.explode.php

+0

謝謝。爲什麼我們應該考慮那些而不是substr? – MEM 2010-09-06 14:34:23

+0

substr()'沒有什麼錯,問題是使用像'a1','a2','a3'這樣的變量,... – Notinlist 2010-09-06 14:38:38

+0

再次感謝所以,爲了解決這個問題,你有什麼建議?:)我的意思是,我絕對相信我們不會在一個非常很長的未來,有更多的3.所以它不是無限的。 - 我將編輯該問題以獲得更好的理解。我相信你的觀察結果在那裏更加貼切。 – MEM 2010-09-06 14:40:12

1
<? 
    function wrapAndCropToArray($text, $width, $lines) 
    { 
     $ret = array_slice(
      explode("\n",wordwrap($text,$width,"\n",true)) 
      , 0 
      , $lines+1 
     ); 
     if(isset($ret[$lines])) 
      $ret[$lines] = "..."; 
     return $ret; 
    } 

    $test = "aadfuiosdy 34 123 412 341f2 38947 1029 384h120 39uh4 19023h 41234"; 
    var_dump(wrapAndCropToArray($test,10,3)); 
?> 

將輸出:

array(4) { 
    [0]=> 
    string(10) "aadfuiosdy" 
    [1]=> 
    string(10) "34 123 412" 
    [2]=> 
    string(5) "341f2" 
    [3]=> 
    string(3) "..." 
} 
+0

因此,我們使用一個數組,這是沒有1,2 3個變量名稱的解決方案? – MEM 2010-09-06 15:03:48

+0

你可以用數組推廣你的算法。你可以將某個常量定義爲3,然後使用該常量。然後,您可以輕鬆將其更改爲2或4.根據經驗法則,每個數據只應寫入一次。 – Notinlist 2010-09-06 15:13:37

+0

'$ parts = wrapAndCropToArray($ test,CONSTANT_FOR_MAXLENGTH,CONSTANT_FOR_LINECOUNT); foreach($ parts as&$ part)echo(htmlspecialchars($ part)。「
\ n」);' – Notinlist 2010-09-06 15:18:07

相關問題