PHP - 函数echo不替换JSON对象字符串中的变量

时间:2014-03-01 18:26:26

标签: php json echo

我想用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

?>

非常感谢你的帮助!

祝你好运

4 个答案:

答案 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"
?>

DEMO

注意

像这样注入变量可能非常危险。确保您的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服务获取值)。在这种情况下,您将需要使用一些模板库,或者使用一些正则表达式自己完成。 使用此方法,您可以按照尝试的方式执行此操作。

我希望这个帮助