如果您需要一个函数返回字符串中到第 N 次出现的子字符串为止的所有文本,请尝试以下函数。
适用于 PHP >= 5。
(Pommef 在下面提供了另一个用于此目的的示例函数,但我认为它是不正确的。)
<?php
function nsubstr($needle, $haystack, $n_occurrence)
{
$arr = explode($needle,$haystack,$n_occurrence);
$last = count($arr) - 1;
$pos_in_last = strpos($arr[$last],$needle);
if ($pos_in_last !== false)
$arr[$last] = substr($arr[$last],0,$pos_in_last);
return implode($needle,$arr);
}
$string = 'd24jkdslgjldk2424jgklsjg24jskgldjk24';
print 'S: ' . $string . '<br>';
print '1: ' . nsubstr('24',$string,1) . '<br>';
print '2: ' . nsubstr('24',$string,2) . '<br>';
print '3: ' . nsubstr('24',$string,3) . '<br>';
print '4: ' . nsubstr('24',$string,4) . '<br>';
print '5: ' . nsubstr('24',$string,5) . '<br>';
print '6: ' . nsubstr('24',$string,6) . '<br>';
print '7: ' . nsubstr('24',$string,7) . '<br>';
?>
请注意,此函数可以与 wordwrap() 结合使用来实现一个常规但相当困难的网页设计目标,即限制内联 HTML 文本到一定行数。 wordwrap() 可以使用 <br> 来拆分字符串,然后你可以使用此函数来仅返回直到第 N 个 <br> 的文本。
你仍然需要对 wordwrap() 中每行的最大字符数进行保守的估计,但你比直接使用 substr() 截断多行字符串更加精确。
请查看示例
<?php
$text = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque id massa. Duis sollicitudin ipsum vel diam. Aliquam pulvinar sagittis felis. Nullam hendrerit semper elit. Donec convallis mollis risus. Cras blandit mollis turpis. Vivamus facilisis, sapien at tincidunt accumsan, arcu dolor suscipit sem, tristique convallis ante ante id diam. Curabitur mollis, lacus vel gravida accumsan, enim quam condimentum est, vitae rutrum neque magna ac enim.';
$wrapped_text = wordwrap($text,100,'<br>',true);
$three_lines = nsubstr('<br>',$wrapped_text,3);
print '<br><br>' . $three_lines;
$four_lines = nsubstr('<br>',$wrapped_text,4);
print '<br><br>' . $four_lines;
?>