Предположим, у меня есть это:Можно ли создать переменную переменную из обратной ссылки в php?
$t = "This %var% should be replaced";
$newText = preg_replace('/%(.+?)%/', "$1", $t);
Что это делает заменить% 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% со значением $ вар и% Foo% со значением $ Foo.
Я уже решил проблему, но по-другому. Но мне все еще интересно, как можно было бы решить это таким образом, поскольку код более читабельен. Если это невозможно решить, то почему?
Спасибо за ваши ответы и интерес. Как я уже сказал, я уже решил проблему по-другому, и да, я использовал preg_repace_callback. Я не ищу решение проблемы, но для объяснения причин невозможности создания переменной переменной из обратной ссылки. Извините, если мой вопрос был запутан или плохо написан, и вы решили, что я все еще ищу решение о том, как достичь своей цели.
Если вы хотите увидеть, как я ее решил, вы можете пойти в мой блог, я разместил там вчера об этом: http://imbuzu.wordpress.com/2012/02/07/back-references-in-php-how-to-create-variable-variables-using-them/
снова. Я не ищу способ сделать это, а скорее объясню, почему это невозможно сделать так, как я изначально планировал. Почему вы не можете создать переменную переменную из обратной ссылки?
Для админов. Этот ответ является общим ответом на все ответы выше.Если вы собираетесь отредактировать его и добавить в качестве комментария к любому из них, добавьте его ко всем из них или, по крайней мере, сообщите пользователям этого ответа. Благодарю.
Почему бы вам не просто использовать preg_replace_callback? - как в стороне, приведенный выше код не особенно поддается повторению, учитывая то, что вы пытаетесь сделать. – AD7six