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

如何使用implode和array_splice实现文本按完整句子分割?

解决思路

核心逻辑是在初步截取指定数量的单词后,继续向后遍历剩余单词,直到匹配到以句号结尾的单词,将这部分也合并到第一区块,保证第一区块以完整句子收尾,不会出现半句拆分的问题。

调整后代码

兼容PHP 8.0+版本

$content = 'Sentence number one. Sentence number two. Sentence number 3. Sentence number 4. Sentence number 5.';
$slices = explode(" ", $content);
// 先取预设的10个单词作为第一区块初始内容
$first_slice_arr = array_splice($slices, 0, 10);
// 循环判断直到第一区块以完整句子结尾
while (!empty($slices) && !str_ends_with(end($first_slice_arr), '.')) {
    $first_slice_arr[] = array_shift($slices);
}
$first_slice = implode(" ", $first_slice_arr);
$second_slice = implode(" ", $slices);

echo '<div class="first_slice">'. $first_slice .'</div>';
echo '<div class="second_slice">'. $second_slice .'</div>';

低版本PHP兼容写法

如果使用的PHP版本低于8.0,没有内置str_ends_with函数,可以替换成下面的判断逻辑:

while (!empty($slices) && substr(end($first_slice_arr), -1) !== '.') {
    $first_slice_arr[] = array_shift($slices);
}

输出结果

运行后输出完全符合预期:

<div class="first_slice">Sentence number one. Sentence number two. Sentence number 3. Sentence number 4.</div>
<div class="second_slice">Sentence number 5.</div>

如果你需要适配问号、感叹号等其他句子结尾符号,只需要修改判断条件,校验结尾字符是否属于指定的符号集合即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:36:03