1

假设我认为我有以下循环

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

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

格迪、李、尼尔、皮尔特、亚历克斯、

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

格迪、李、奈...

由于字符串是从循环中输出的,我不确定如何在 this 周围包装一个截断函数foreach

感谢您的帮助!

样本截断函数

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

4 回答 4

3

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

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

echo truncate_text($str, 'whatever');
于 2011-05-23T02:47:21.703 回答
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;

这还具有不留下难看的尾随逗号的好处。

于 2011-05-23T02:54:40.847 回答
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将输出截断的文本。

还可以考虑为循环或条件使用括号,虽然这不是必需的,但它会在调试代码时为您提供很多帮助,因为使用括号 {} 可以正确缩进您的代码。

于 2011-05-23T02:52:36.307 回答
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, ', ');

这样做的(次要)优点是您不必遍历整行。

于 2011-05-23T02:59:08.100 回答