如何使用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
相关产品推荐
相关产品推荐

