You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 01:12:40