想知道是否有人可以在这里帮助我,是否有任何相对简单的方法在一定数量的单词后插入一些带有给定字符串的标签......
例如,服用:
$string = 'Helping customers to do something everyday';
并在每隔三个字后插入一次,以便输出
Helping customers to </span><span> do something everyday
我猜测某种正则表达式的使用,但它们不是我的强项,也可能是for循环中的一个?
/////////////////////////////
更新:
为帮助人员干杯:
我有一个脑波并提出了这个功能,它正是我所需要的:
function insert_tags ( $string )
{
$string = explode ( " ", $string );
$count = 0;
$result = '';
foreach ( $string as $s )
{
if ( $count == 3 )
{
$result .= '</span><span>' . $s . ' ';
$count = 1;
}
else
{
$result .= $s . ' ';
}
$count++;
}
return $result;
}
答案 0 :(得分:1)
你可以使用正则表达式来实现:
`preg_replace('/\b\w+\b{3}/', '\0 </span><span>' ...`
但是使用数组可能更好,假设单词只用单个空格分隔:
$words = explode(' ', $string);
$chunks = array_chunk($words, 3);
$final = '';
foreach ($chunks as $words) {
$final .= implode(' ', $words) . ' </span><span>';
}
请注意,这两个都可以有最终</span><span>
,所以如果这是一个问题,你必须手动修剪它,或者只是改进我所做的。
答案 1 :(得分:1)
这有点像@ tandu的回复,但我更喜欢这种方法。它不会在行尾添加span标记。
function insert_tags($string) {
$exString = explode(' ', $string);
$newString = array();
for($i=0; $i < sizeof($exString); $i++) {
if($i % 3 == 0 and $i != 0) {
$newString[] = '</span><span>';
}
$newString[] = $exString[$i];
}
$newString = implode(' ', $newString);
return $newString;
}
测试返回:
Helping customers to <span></span> do something everyday
Helping customers to <span></span> do something everyday <span></span> okay there a
Helping customers to <span></span> do something everyday <span></span> okay there a <span></span> a
Helping customers to <span></span> do something everyday <span></span> okay there
答案 2 :(得分:0)
这是怎么回事?
((?:\b.+?\b ?){3})
替换为:
<span>$1</span>
所以在你的代码中:
$string = 'Helping customers to do something everyday';
$pattern = '/((?:\b.+?\b ?){3})/';
$replacement = '<span>$1</span>';
echo preg_replace($pattern, $replacement, $string);
我的正则表达式测试仪显示结果:
<span>Helping customers to </span><span>do something everyday</span>
我不是百分之百地使用PHP,所以让我知道你是怎么做的!