PHP使用preg_split按点分割字符串返回数量不符合预期如何解决
问题原因
你的字符串末尾以.结尾,用preg_split('/[.]+/', $string)按点分割时,最后一个.后面没有内容,会生成一个空字符串作为数组的最后一个元素,str_word_count统计空字符串的结果就是0,这就是多出来的0的来源。
解决方案
有两种常用的修复方式:
方式1:分割时直接过滤空元素
使用preg_split的第四个参数PREG_SPLIT_NO_EMPTY,自动排除分割结果里的空值,代码修改如下:
// 第三个参数-1表示不限制分割次数,所有匹配的位置都拆分 $sentenceArray = preg_split('/[.]+/', $string, -1, PREG_SPLIT_NO_EMPTY); foreach ($sentenceArray as $sentence) { $numberOfWords = str_word_count($sentence); echo '<br>' . $numberOfWords . '<br>'; }
方式2:遍历统计时过滤空句子
遍历的时候先判断句子内容是否为空,非空才进行统计:
$sentenceArray = preg_split('/[.]+/', $string); foreach ($sentenceArray as $sentence) { // 先trim掉空格、换行等空白字符,再判断是否非空 if (trim($sentence) !== '') { $numberOfWords = str_word_count($sentence); echo '<br>' . $numberOfWords . '<br>'; } }
内容的提问来源于stack exchange,提问作者KarenS
相关产品推荐
相关产品推荐

