dongquqiao2010 2014-11-20 17:48
浏览 27
已采纳

替换为相同的命名PHP变量

My Example:

$name = "Simon";
$string = "My name is [name].";
echo preg_replace("/\[(.*)]/", ${"$1"}, $string);
// Expected: My name is Simon.
// I get: My name is .
// ${"$1"} should be $name?
exit();

When I do only:

echo preg_replace("/\[(.*)]/", "$1", $string);
// I get: My name is name.
// $1 = name

What am i doing wrong? Why is PHP not using the generated $name var? This is only a example. I would like to work this with any replace:

[foo] --> $foo
[bar] --> $bar
...
  • 写回答

3条回答 默认 最新

  • duancaoqin6683 2014-11-20 18:24
    关注

    As per OP's wish to post my comment as an answer:

    In order for this to work, you will need to change [name] to [$name] and ${"$1"} to "$1"

    $name = "Simon";
    $string = "My name is [$name].";
    
    echo preg_replace("/\[(.*?)]/", "$1", $string);
    

    PHP needs a variable to go on, so using [name] isn't being populated.


    As per another and earlier comment I made, alternatively you could very well do:

    $name = "Simon";
    $string = "My name is " .$name;
    
    echo $string;
    

    If you have a framework with existing brackets, then that is something you haven't told us, only that you said in comments:
    " have much more Placeholders, not only [name]", whether it's part of something bigger, then stick to the accepted method.


    As per in comments, you could alternatively use "/\[([^\]]+)\]/" instead of "/\[(.*)]/"
    Or "/[(.*?)]/" :)

    in regards to using for example: "[$foo]bar[$foo]"

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥50 求解vmware的网络模式问题 别拿AI回答
  • ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳
  • ¥15 springboot 3.0 实现Security 6.x版本集成
  • ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
  • ¥30 请帮我解决一下下面六个代码
  • ¥15 关于资源监视工具的e-care有知道的嘛
  • ¥35 MIMO天线稀疏阵列排布问题
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?