PHP - 如何截断foreach循环形成的字符串?

时间:2011-05-23 02:45:28

标签: php foreach truncate strlen

假设我在视图中有以下循环

foreach ($value as $row):
     echo $row['name'] . ', ';
endforeach;

这会在我的浏览器中输出这样的字符串

  

Geddy,Lee,Neil,Peart,Alex,

我想知道是否有人可以建议在n个字符处截断此字符串的方法,例如

  

Geddy,Lee,Ne ......

由于字符串是从循环输出的,我不确定如何围绕此foreach包装截断函数。

感谢您的帮助!

示例截断函数

function truncate_text($text, $nbrChar, $append='...') {
     if(strlen($text) > $nbrChar) {
          $text = substr($text, 0, $nbrChar);
          $text .= $append;
     }
     return $text;
}

4 个答案:

答案 0 :(得分:3)

为什么不将行值保存到变量并截断该变量并只回显?

var $str = "";
foreach ($value as $row):
     $str .= $row['name'] . ', ';
endforeach;

echo truncate_text($str, 'whatever');

答案 1 :(得分:2)

首先,不需要foreach。其次,如果需要,我们可以截断它。

// Maximum length of the string; note that this does not include the '...'
$length = 20; 

// This is PHP 5.3 only and converts the value array to an array of names 
// $value = array_map(function ($f) { return $f["name"];}, $value);

// This is a PHP 5.2 way to do the array mapping
$value = array_map(create_function('$f', 'return $f["name"];'), $value);

$string = join(', ', $value);
$truncated = (strlen($string) > $length) 
    ? substr($string, 0, $length) . '...' 
    : $string;

这样做的好处是不会留下丑陋的尾随逗号。

答案 2 :(得分:0)

function truncate_text($text, $nbrChar, $append='...') {
     if(strlen($text) > $nbrChar) {
          $text = substr($text, 0, $nbrChar);
          $text .= $append;
     }
     return $text;
}

然后在foreach中你可以像这样做

foreach ($value as $row) {
     $name = truncate_text($row['name']);
}

现在$name将输出截断的文字。

还考虑使用括号作为循环或条件,虽然没有必要但是在调试代码时它会帮助你很多,因为使用括号{}可以正确地缩进你的代码。

答案 3 :(得分:0)

您可以使用break

执行此操作
$limit = 20;
$str = '';
foreach ($value as $row) {
   if ($str > $limit) {
      $str .= substr($row, 0, $limit) . '...';
      break;
   }
   $str .= "$row, ";
   $limit -= strlen($row);
}
$str = rtrim($str, ', ');

这个(次要)的优点是你不必遍历整行。