带有多个参数的PHP preg_replace_callback

时间:2011-10-06 02:18:25

标签: php random preg-replace-callback

我想做一个正则表达式替换,但我不想每次都找到它。我认为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/>';

由于 阿伦

2 个答案:

答案 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/>';