2013-03-21 95 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