0

0

PHP 实现单词换行与连字符连接的文本截断功能

花韻仙語

花韻仙語

发布时间:2026-03-11 11:13:03

|

262人浏览过

|

来源于php中文网

原创

PHP 实现单词换行与连字符连接的文本截断功能

本文介绍如何在 php 中实现基于最大字符长度的单词分组换行功能,将单词数组按行拼接为以短横线分隔的字符串,确保每行总长度不超过指定限制,并保持单词完整性。

本文介绍如何在 php 中实现基于最大字符长度的单词分组换行功能,将单词数组按行拼接为以短横线分隔的字符串,确保每行总长度不超过指定限制,并保持单词完整性。

在文本排版或前端渲染场景中,常需将一组单词“智能折行”——即在不拆分单个单词的前提下,尽可能多地将连续单词组合成一行,且整行(含分隔符)长度 ≤ 给定上限。本教程提供一种简洁、健壮、符合语义逻辑的 PHP 实现方案。

核心思路是:先空格拼接 → 借助 wordwrap() 按字符数软换行 → 再按换行符切分 → 最后将每行空格替换为短横线 -。该方法巧妙复用 PHP 内置函数 wordwrap() 的单词边界保护机制(它默认不会在单词中间截断),避免手动遍历和复杂的状态管理。

以下是完整可运行的函数实现:

/**
 * 将单词数组按最大行宽进行分组换行,单词间以 '-' 连接
 *
 * @param array $words 单词字符串数组
 * @param int $maxLineLength 每行最大允许字符数(含 '-')
 * @return array 分组后的字符串数组
 */
function wrapLines(array $words, int $maxLineLength): array
{
    if (empty($words)) {
        return [];
    }

    // 1. 用空格连接所有单词(wordwrap 要求输入为单字符串)
    $joined = implode(' ', $words);

    // 2. 使用 wordwrap 自动按长度折行(保留单词完整性)
    // 注意:break 参数默认为 "\n",无需显式指定
    $wrapped = wordwrap($joined, $maxLineLength, "\n", false);

    // 3. 按换行符分割为行数组,并将每行空格替换为 '-'
    return array_map(
        function (string $line): string {
            return str_replace(' ', '-', trim($line));
        },
        explode("\n", $wrapped)
    );
}

// 示例调用
$words1 = [
    "The", "day", "began", "as", "still", "as", "the",
    "night", "abruptly", "lighted", "with", "brilliant", "flame"
];

$result = wrapLines($words1, 13);
print_r($result);

输出结果为:

Moshi Chat
Moshi Chat

法国AI实验室Kyutai推出的端到端实时多模态AI语音模型,具备听、说、看的能力,不仅可以实时收听,还能进行自然对话。

下载

立即学习PHP免费学习笔记(深入)”;

Array
(
    [0] => The-day-began
    [1] => as-still-as
    [2] => the-night
    [3] => abruptly
    [4] => lighted-with
    [5] => brilliant
    [6] => flame
)

关键优势说明

  • wordwrap() 默认启用 cut = false(即不强制截断单词),天然满足“不拆单词”的业务约束;
  • implode(' ', ...) → wordwrap(...) → explode("\n", ...) 形成清晰的数据流管道,逻辑内聚、易于测试与维护;
  • 使用 array_map 和匿名函数封装转换逻辑,语义明确,无副作用;
  • 函数签名明确标注类型(array, int, string),增强可读性与 IDE 支持。

⚠️ 注意事项

  • 若输入单词本身长度 > $maxLineLength(如 ["supercalifragilisticexpialidocious"] 且 $maxLineLength = 10),wordwrap() 仍会将其独占一行(因 cut=false),这是合理行为——单个超长词无法拆分,必须独占一行;
  • 确保输入 $words 元素均为非空字符串,否则 trim() 和 str_replace() 可能产生意外空行,建议前置过滤:array_filter($words, 'strlen');
  • 如需兼容多字节字符(如中文),应改用 mb_ 系列函数(如 mb_wordwrap 需自行实现),但本例中 wordwrap() 对 ASCII 单词完全可靠。

该方案兼顾简洁性、可读性与工程鲁棒性,适用于日志摘要、标签云、响应式文本卡片等需要动态控制行宽的 PHP 应用场景。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1010

2023.08.02

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1565

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

649

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

1208

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

1184

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

192

2025.07.29

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

22

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.2万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号