Указание функции обратного вызова в preg_replace_callback? - PullRequest
0 голосов
/ 22 сентября 2009

У меня есть такой код (это упрощенный пример):

function callback_func($matches) {
  return $matches[0] . "some other stuff";
}

function other_func($text) {
  $out = "<li>"; 
  preg_replace_callback("/_[a-zA-Z]*/","callback_func",$desc);
  $out .= $desc ."</li> \r\n";
  return $out;
}

echo other_func("This is a _test");

Вывод этого должен быть

<li>This is a _testsome other stuff</li>

но я просто получаю

<li>This is a _test</li>

Что я делаю неправильно / какое странное заклинание требуется для успокоения богов php?

Ответы [ 3 ]

5 голосов
/ 22 сентября 2009

preg_replace_callback не изменяет строку на месте, а вместо этого возвращает измененную копию. Попробуйте следующий экземпляр:

function other_func($text) {
    $out = "<li>"; 
    $out .= preg_replace_callback("/_[a-zA-Z]*/","callback_func",$desc);
    $out .= "</li> \r\n";
    return $out;
}
0 голосов
/ 22 сентября 2009

Разобрался. preg_replace_callback не изменяет исходную тему, как я и предполагал. Я должен был изменить

preg_replace_callback("/_[a-zA-Z]*/","callback_func",$desc);

до

$desc = preg_replace_callback("/_[a-zA-Z]*/","callback_func",$desc);
0 голосов
/ 22 сентября 2009

Проблема в том, что вы никогда не добавляете выходные данные функции в переменную $ out. Так что в callback_func () вы должны использовать:

$out .= $matches[0] . "some other stuff";

Затем он добавит результат в строку для вывода. Вы просто возвращаете значение и ничего не делаете с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...