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
相关产品推荐
相关产品推荐

