Предположим, у меня есть это:
$t = "This %var% should be replaced";
$newText = preg_replace('/%(.+?)%/', "$1", $t);
Что заменяет% var% на var, поэтому текст становится:
This var should be replaced.
Но я хочу иметь переменную с именем $ var, а затем заменить "% var%" значением $ var.
Мы знаем, что можем создавать переменные переменные следующим образом:
$foo = "one";
$$foo = "two"
echo $one; //prints "two"
Если вы не знаете об этом, возможно, вы не сможете ответить на мой вопрос. Но вы можете прочитать больше о переменных переменных на http://www.php.net/manual/en/language.variables.variable.php
Ну, это не работает в этом случае. Если я сделаю это:
$t = "This %var% should be replaced";
$newText = preg_replace('/%(.+?)%/', $"$1", $t);
Я получаю ошибку.
Я тоже так пытался:
$t = "This %var% should be replaced";
$newText = preg_replace('/%(.+?)%/', ${$1}, $t);
И я получаю еще одну ошибку.
Вопрос: как мне создать переменную переменную, чтобы заменить% var% значением $ var?
Некоторые из вас могут спросить, почему бы просто не сделать это:
$t = "This %var% should be replaced";
$newText = preg_replace('/%(.+?)%/', $var, $t);
Причина проста. Текст у меня более сложный, чем этот. Давайте сделаем это веселее, не так ли?
$text = "This %var% should be replaced, just like this %foo%;
$newText = preg_replace('/%(.+?)%/', "$1", $text);
Как видите, нам нужно заменить% var% значением $ var, а% foo% значением $ foo.
Я уже решил проблему, но по-другому. Но мне все еще интересно, как можно было бы решить это таким образом, так как код более читабелен. Если это невозможно решить, то почему?
Спасибо за ваши ответы и интерес. Как я уже сказал, я уже решил проблему по-другому, и да, я использовал preg_repace_callback. Я не ищу решение проблемы, но объясняю, почему невозможно создать переменную переменную из обратной ссылки. Извините, если мой вопрос был смущающим или плохо написанным и заставил вас, ребята, думать, что я все еще искал решение о том, как достичь своей цели.
Если вы хотите посмотреть, как я это решил, вы можете зайти в мой блог, который я вчера размещал там по этому поводу: http://imbuzu.wordpress.com/2012/02/07/back-references-in-php-how-to-create-variable-variables-using-them/
Снова. Я не ищу способ сделать это, а скорее для объяснения, почему это невозможно сделать так, как я изначально планировал. Почему вы не можете создать переменную из обратной ссылки?
Администраторам. Этот ответ является общим ответом на все ответы выше. Если вы собираетесь отредактировать его и добавить в качестве комментария к любому из них, добавьте его ко всем или, по крайней мере, уведомите пользователей об этом ответе. Спасибо.