如何在Controller中截断$row数组的member与email拼接内容?
问题:DataTable中截断拼接后的文本内容
在Controller中编写了如下代码用于给DataTable提供数据,拼接$row['member']和$row['email']后希望截断过长的内容,但尝试模板引擎的|truncate(5)、[email|truncate(5)]语法均无效:
$values = array( $row['member'] . '-' . $row['email'], $row['transactionDate'], $row['currency'], $row['amount'], empty($row['amountReceived']) ? '0.00' : $row['amountReceived'], $row['status'], $row['status'] == 'Pending' ? $action : '' );
解决方案
你是在PHP控制器代码中处理数据,模板引擎的truncate过滤器语法在这里不生效,需要用PHP原生的字符串截断方法:
方法1:单字节字符截断(用substr)
直接对拼接后的字符串截断,超过指定长度追加省略号:
$combined = $row['member'] . '-' . $row['email']; $truncated = strlen($combined) > 5 ? substr($combined, 0, 5) . '...' : $combined; $values = array( $truncated, $row['transactionDate'], $row['currency'], $row['amount'], empty($row['amountReceived']) ? '0.00' : $row['amountReceived'], $row['status'], $row['status'] == 'Pending' ? $action : '' );
方法2:多字节字符截断(用mb_substr,支持中文)
如果内容包含中文等多字节字符,用mb_substr避免乱码:
$combined = $row['member'] . '-' . $row['email']; $maxLength = 5; $truncated = mb_strlen($combined) > $maxLength ? mb_substr($combined, 0, $maxLength) . '...' : $combined; $values = array( $truncated, $row['transactionDate'], $row['currency'], $row['amount'], empty($row['amountReceived']) ? '0.00' : $row['amountReceived'], $row['status'], $row['status'] == 'Pending' ? $action : '' );
方法3:按单词截断(避免截断到单词中间)
如果需要保持单词完整性,可自定义函数:
function truncateByWord($str, $maxLength = 5, $suffix = '...') { if (mb_strlen($str) <= $maxLength) { return $str; } $truncated = mb_substr($str, 0, $maxLength); $lastSpace = mb_strrpos($truncated, ' '); if ($lastSpace !== false) { $truncated = mb_substr($truncated, 0, $lastSpace); } return $truncated . $suffix; } $combined = $row['member'] . '-' . $row['email']; $truncated = truncateByWord($combined, 5); $values = array( $truncated, $row['transactionDate'], $row['currency'], $row['amount'], empty($row['amountReceived']) ? '0.00' : $row['amountReceived'], $row['status'], $row['status'] == 'Pending' ? $action : '' );
内容的提问来源于stack exchange,提问作者jim
相关产品推荐
相关产品推荐

