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

PHP如何对二维数组name字段字符串截断并追加自定义后缀

问题核心原因

原有一维处理逻辑失效,是因为遍历二维数组时,array_map每次接收到的单元是完整的子数组,而非name字段对应的字符串,只要在遍历回调中单独处理name字段、保留其余键值不变即可,你之前写的cutString截断函数可以直接复用,不需要修改。

完整实现代码
// 可直接复用你原有的字符串截断函数
function cutString(string $string, int $length, string $appends)
{
    if (mb_strlen($string) < $length) {
        return $string;
    }
    return mb_strimwidth($string, 0, $length) . $appends;
}

// 自定义配置
$targetLength = 5;
$appendContent = '...';

// 处理二维数组
$result = array_map(
    function ($subArray) use ($targetLength, $appendContent) {
        // 仅截断name字段,其余字段原样保留
        $subArray['name'] = cutString($subArray['name'], $targetLength, $appendContent);
        return $subArray;
    },
    $arr
);
补充:直接修改原数组的写法

如果不需要保留原始数组数据,用foreach引用遍历写法更简洁,注意遍历结束后要销毁引用变量避免后续逻辑异常:

foreach ($arr as &$item) {
    $item['name'] = cutString($item['name'], 5, '...');
}
unset($item);
效果说明

运行上述代码后得到的结果和你给出的预期完全一致:

  • 多字节字符(如示例中的俄文Сatalog)可正常截断,不会出现乱码
  • 长度小于指定阈值的字符串不会被截断,也不会追加后缀
  • 子数组中sort、path等非name字段完全保留原有值和类型,不会被改动

内容的提问来源于stack exchange,提问作者mynameEYE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:03:25