假设我在视图中有以下循环
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;
}
答案 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, ', ');
这个(次要)的优点是你不必遍历整行。