2013-03-21 66 views
0

對於需要檢查字符串是否超出給定長度的情況 ,如果確實如此,則截斷並添加省略號我通常使用如下函數 但是想知道是否有人不能在一行代替, preg_replace也許?我該如何縮短php truncate函數?

function truncate($str, $length){ 

    if (strLen($str) > $length) { 
     $str = substr($str, 0, $length) . ' ...'; 
    } 
    return $str; 
} 
+0

使用動態'$ length'價值,我不這麼認爲。使用靜態長度,你可以使用你的子串行。 – 2013-03-21 17:23:38

+2

爲什麼你在意如果你在一條線上做?你認爲這會使你的程序運行速度有所不同。它可能不會除非你打電話截斷數千次。如果您想了解代碼的哪些部分很慢,請使用像XDebug這樣的分析工具。 – 2013-03-21 17:25:40

+0

你想要一個截斷的截斷?但是,嚴肅地說,你所得到的沒有任何問題。它的工作原理和它不言自明。不要太在意削減已經很短的功能。除最簡單的情況外,正則表達式在所有情況下往往是難以理解的。 – GordonM 2013-03-21 17:26:56

回答

3

如果你正在尋找一個正則表達式的解決方案:

function truncate($str, $length) { 
    return preg_replace('/(.{'.(int)$length.'}).+/s', '$1 ...', $str); 
} 
+0

一個非常聰明的方法+1! – HamZa 2013-03-21 17:36:44

+0

像一個咒語一樣工作,很棒。 – adax2000 2013-03-21 17:38:17

5

具有內嵌如果:

return strLen($str) > $length ? substr($str, 0, $length) . ' ...' : $str; 
+5

使用…而不是'...' – fiunchinho 2013-03-21 17:22:05