PHP按单词数拆分字符串为两部分,奇数词时第二部分多一词
解决PHP字符串按单词拆分时奇数单词分配问题
我写了一个PHP函数,按照单词数把字符串拆成两部分,每部分用<span>标签包裹。当原字符串单词数为奇数时,希望第二个<span>能多包含1个单词,但当前代码会把额外的单词分到第一个<span>里。
现有代码:
$array = explode( ' ', 'Lorem ipsum dolor sit amet' ); $count = count( $array ); $per_part = max( round( $count / 2 ), 1 ); $new_array = []; for ( $i = 0; $i < 2; $i++ ) { $new_array[] = array_slice( $array, $i * $per_part, $per_part ); } $first_string = join(' ', $new_array[0]); $second_string = join(' ', $new_array[1]); $new_string = '<span>' . $first_string . '</span>' . ' <span>' . $second_string . '</span>'; echo htmlspecialchars($new_string);
当前结果:
<span>Lorem ipsum dolor</span> <span>sit amet</span>
期望结果:
<span>Lorem ipsum</span> <span>dolor sit amet</span>
问题原因
问题出在round($count / 2)的计算逻辑上。当单词数为奇数时(比如示例中的5个),5/2=2.5,round()会向上取整得到3,导致第一部分直接分到3个单词,第二部分只能拿到剩下的2个。
修正方案
把round()替换为floor()(向下取整),让第一部分只分到单词总数的一半整数部分,剩下的所有单词自动归到第二部分。更简洁的写法可以直接拆分两部分,不用循环:
$array = explode( ' ', 'Lorem ipsum dolor sit amet' ); $count = count( $array ); // 第一部分取总数的一半整数部分 $first_part_length = floor($count / 2); $first_array = array_slice($array, 0, $first_part_length); // 第二部分从第一部分结束的位置取到末尾 $second_array = array_slice($array, $first_part_length); $first_string = join(' ', $first_array); $second_string = join(' ', $second_array); $new_string = '<span>' . $first_string . '</span>' . ' <span>' . $second_string . '</span>'; echo htmlspecialchars($new_string);
修正后结果
运行上述代码后,会得到符合预期的输出:
<span>Lorem ipsum</span> <span>dolor sit amet</span>
内容的提问来源于stack exchange,提问作者user13286
相关产品推荐
相关产品推荐

