我想用php函数echo直接打印变量'$ fruit'的值。
如果我使用一个字符串,这可以正常工作,但如果该字符串是由JSON对象先前检索的,则不会使用其值来修改该变量。
上面的php代码清楚地说明了这个问题。
<?php
$json = '{
"object_1":
{
"0": "banana",
"1": "$fruit"
}
}';
$fruit = "mango";
$object_json = json_decode($json, false);
$var = $object_json->object_1->{1} ;
echo "$fruit "; // result: mango
echo $var; // result: $fruit, expected: mango
?>
非常感谢你的帮助!
祝你好运
答案 0 :(得分:1)
您可以使用$$variableName
notation通过动态变量名来引用局部变量。
<?php
$json = '{
"object_1": {
"0": "banana",
"1": "$fruit"
}
}';
$fruit = "mango";
$object_json = json_decode($json, false);
$var = $object_json->object_1->{1};
var_dump($var); //string(6) "$fruit"
var_dump($fruit); //string(5) "mango"
if (strlen($var) >= 1 && $var[0] == '$') {
$variableName = substr($var, 1); //string(5) "fruit"
$var = $$variableName; //expanded $fruit
}
var_dump($var); //string(5) "mango"
?>
注意强>:
像这样注入变量可能非常危险。确保您的JSON来自受信任的来源,不客户端/浏览器。这与extract()
具有相同的漏洞 - 请查看手册中的警告。
答案 1 :(得分:0)
<?php
$json = '{
"object_1": {
"0": "banana",
"1": "$fruit"
}
}';
$fruit = "mango";
$object_json = json_decode($json, false);
echo $newFruit=$object_json->object_1->{0};
echo $oldFruit=$object_json->object_1->{1};
&GT;
答案 2 :(得分:-1)
这是因为双引号表示php中的模板字符串,单引号表示静态字符串。
echo '$fruit '; // result: $fruit
echo "$fruit "; // result: mango
答案 3 :(得分:-2)
您在代码中遇到了一些概念上的失败。
查看与您期望的相同代码的此版本:
<?php
$fruit = "mango";
$json = "{
'object_1':
{
'0': 'banana',
'1': '$fruit'
}
}";
$object_json = json_decode($json, false);
$var = $object_json->object_1->{1} ;
echo "$fruit"; // result: mango
echo $var; // result: mango
?>
代码上的一个错误是您在定义变量之前引用变量。 第二个是你不能期望用单引号字符串替换变量。使用双引号字符串会发生这种情况。
尽管如此,也许您想要的是在获得变量值后立即替换变量(例如,您可以从Web服务获取值)。在这种情况下,您将需要使用一些模板库,或者使用一些正则表达式自己完成。 使用此方法,您可以按照尝试的方式执行此操作。
我希望这个帮助