PHP 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/>';

Спасибо Аллен


person Allen Stoner    schedule 06.10.2011    source источник


Ответы (1)


Вы не можете напрямую передать ему несколько параметров. Однако вы могли бы сделать функцию вместо этого методом класса, а затем создать экземпляр класса, свойства члена которого установлены со значениями, которые вы хотите сделать доступными для функции (например, $random).

person Amber    schedule 06.10.2011