为什么我的变量变量没有引用json数据?

时间:2017-12-21 23:22:35

标签: php json dynamic-variables

我试图理解并彻底解决这个问题。我认为我很接近,因为我怀疑我只是错误地引用了我的json数据,但我无法弄清楚如何正确地做到这一点。这是用例。

我正在构建一个简单的分类帐系统来跟踪加密事务。该系统还可以很好地计算硬币总数,以美元计算硬币值,并计算整体投资组合价值等。

我让用户跟踪他们选择的硬币,这些硬币位于一个名为$ coins的数组中。 $ coins数组在我的代码中通过数据库调用初始化,并包含$ coin-> ID和$ coin->符号。

为了确定以美元计算的硬币值,我使用他们的API拨打CryptoCompare,在从我的$ coins数组中获取硬币符号后,看起来像这样:

https://min-api.cryptocompare.com/data/pricemulti?fsyms=ADA,BTC,ETH,LTC&tsyms=USD

只需将该网址弹出到浏览器view the results即可。

$ price_request_data在解码后存储该数据。

现在当我尝试通过我的$ coins循环引用JSON数据时出现问题。如果我使用直接引用,我可以很好地引用数据,如:

$price_request_data->BTC->USD

产生15592的值。

但显然我想循环我的$ coins循环并为每个硬币动态创建变量以保持其各自的价格。当我尝试以这种方式引用JSON数据时,它无法检索价格(15592)而是返回0.

        // ----------------------------------------------------------
        // GET CURRENT PRICES

        $apiurl = "https://min-api.cryptocompare.com/data/pricemulti?fsyms=ADA,BTC,ETH,LTC&tsyms=USD";

        $price_request = wp_remote_get( $apiurl );

        if( is_wp_error( $price_request ) ) {
            return false;
        }

        $price_request_body = wp_remote_retrieve_body( $price_request );

        $price_request_data = json_decode( $price_request_body );

        if( ! empty( $price_request_data ) ) {

            echo $price_request_data->BTC->USD . "<br />"; // PRODUCES 15592

            foreach( $coins as $coin ) {

                $pricereqdata = "price_request_data->" . $coin->symbol . "->USD";

                echo $$pricereqdata; // PRODUCES 0

                // Generate the variable name string i.e. "curpricebtc"
                $curprice = "curprice" . strtolower( $coin->symbol );

                // Format the current coin's price
                $$curprice = number_format( ceil_dec( $$pricereqdata, 2 ), 2, ".", "" );


            }

        }

这是$ price_request_data的vardump:

object(stdClass)#1527 (4) {
  ["ADA"]=>
  object(stdClass)#1528 (1) {
    ["USD"]=>
    float(0.4469)
  }
  ["BTC"]=>
  object(stdClass)#1535 (1) {
    ["USD"]=>
    float(15592)
  }
  ["ETH"]=>
  object(stdClass)#1536 (1) {
    ["USD"]=>
    float(757.13)
  }
  ["LTC"]=>
  object(stdClass)#1539 (1) {
    ["USD"]=>
    float(291.21)
  }
}

我正在使用PHP7,我知道一些参考规则发生了变化,但我无法确定这是否是我的问题。我发誓这只是我用变量引用它的方式,但我没有足够的经验来知道原因。

非常感谢任何智慧。

1 个答案:

答案 0 :(得分:2)

行:

问:“$ price_request_data”是否等于{"ADA":{"USD":0.4738},"BTC":{"USD":15486.46},"ETH":{"USD":786.47},"LTC":{"USD":306.48}}(或等效)?

&lt; =您的评论,“// WORKS”,暗示“是”

问:“$ coin”在哪里初始化?它的价值是什么?

问:“$ pricereqdata”的值是多少?

问:“$$ pricereqdata”会为您创建一个新变量吗?它是什么?它的价值是什么?

换句话说,究竟是什么意思“// FAILS”???