这是我的职责:
$words = explode('. ', $desc);
$out = '';
foreach ($words as $key => $value) {
$out .= $value;
$rand = rand(0, 4);
if ($rand == 2) {
$out .= "\n";
} else {
$out .= ' ';
}
}
简而言之,它是在随机点之后插入新行,但在这种情况下,点被删除。
我怎样才能做到
explode('. ', $desc)
,并在原来的位置留下点?
连接时将它们放回原处即可。
$words = explode('. ',$desc);
$out = '';
foreach ($words as $key => $value) {
$out .= $value.'.';
$rand = mt_rand(0, 4);
if ($rand == 2) {
$out .= "\n";
} else {
$out .= ' ';
}
}
您还应该使用
mt_rand()
,它是rand()
的更好版本,除非您喜欢不是真正随机的结果。
无正则表达式主题的积极向后看。
$words = preg_split('/(?<=\.)(?!\s*$)/', $desc);
在任何非字符处进行分割,其后面带有
dot
。
尝试这个代码..
$words = explode('. ',$desc);
$out = '';
foreach ($words as $key => $value) {
$out .= $value;
$rand = rand(0, 4);
if ($rand == 2) {
$out .= "<br>";
} else {
$out .= ' ';
}
}
您不需要分解字符串并循环数组。 这一切都可以通过一次
preg_replace_callback()
调用来完成。
要随机用点后面的空格替换换行符,只需匹配一个点,忘记您将该点与
\K
匹配,然后有条件地用具有预配置随机性的换行符替换该空格。 演示
$text = 'Here. Is. A. Test. String. Apply. Random. Newlines.';
echo preg_replace_callback(
'/\.\K /',
fn() => rand(0, 4) === 2 ? "\n" : ' ',
$text
);
潜在产出:
Here. Is.
A. Test. String. Apply. Random.
Newlines.