我想做一个正则表达式替换,但我不想每次都找到它。我认为preg_replace_callback是我需要使用的,只是在那里进行随机检查,但我无法弄清楚如何传递回调函数的多个参数。我最终需要两个以上,但如果我可以完成两项工作,我可能会更多地工作。
例如,我希望在50%的时间内进行替换,而其他时候我只是返回找到的内容。这里有一些我一直在使用的功能,但是他们不能正确。
function pick_one($matches, $random) {
$choices = explode('|', $matches[1]);
return $random . $choices[array_rand($choices)];
}
function doSpin($content) {
$call = array_map("pick_one", 50);
return preg_replace_callback('!\[%(.*?)%\]!', $call, $content);
/* return preg_replace_callback('!\[%(.*?)%\]!', 'pick_one($1, 50)', $content); */
}
$content = 'This [%should|ought|would|could%] make it much [%more convenient|faster|easier%] and help reduce duplicate content.';
echo doSpin($content).'<br/>';
由于 阿伦
答案 0 :(得分:1)
您不能直接传递多个参数。但是,你可以做的是使函数成为一个类方法,然后创建一个类的实例,该类的成员属性设置为你希望函数可用的值(如$random
)。 / p>
答案 1 :(得分:0)
<?php
function pick_one($groups) {
// half of the time, return all options
if (rand(0,1) == 1) {
return $groups[1];
};
// the other half of the time, return one random option
$choices = explode('|', $groups[1]);
return $choices[array_rand($choices)];
}
function doSpin($content) {
return preg_replace_callback('!\[%(.*?)%\]!', 'pick_one', $content);
}
$content = 'This [%should|ought|would|could%] make it much [%more convenient|faster|easier%] and help reduce duplicate content.';
echo doSpin($content).'<br/>';