Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么我的变量没有引用json数据?_Php_Json_Dynamic Variables - Fatal编程技术网

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

Php 为什么我的变量没有引用json数据?,php,json,dynamic-variables,Php,Json,Dynamic Variables,我一直在努力理解和解决这个问题。我想我很接近于,我怀疑我只是错误地引用了我的json数据,但我不知道如何正确地做。下面是用例 我正在建立一个简单的分类帐系统来跟踪加密交易。该系统还可以很好地统计硬币总数,以美元计算硬币价值,并计算总投资组合价值等 我让用户跟踪他们选择的硬币,这些硬币位于一个叫做$coins的数组中。$coins数组在我的代码前面通过数据库调用初始化,它包含$coin->ID和$coin->符号 为了确定美元硬币的价值,我使用他们的API调用CryptoCompare,从我的$c

我一直在努力理解和解决这个问题。我想我很接近于,我怀疑我只是错误地引用了我的json数据,但我不知道如何正确地做。下面是用例

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

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

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

https://min-api.cryptocompare.com/data/pricemulti?fsyms=ADA,BTC,ETH,LTC&tsyms=USD
只需将该URL弹出到浏览器中进行设置

$price_request_数据在解码后存储该数据

现在,当我试图通过$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, ".", "" );


            }

        }
我正在使用PHP7,我知道一些参考规则已经更改,但我无法确定这是否是我的问题。我发誓这只是我引用变量的方式,但我没有足够的经验知道为什么

任何智慧都是值得赞赏的。

好的:

问:“$price\u request\u data”是否等于{code>{“ADA”:{“USD”:0.4738},“BTC”:{“USD”:15486.46},“ETH”:{“USD”:786.47},“LTC”:{“USD”:306.48}(或同等品)


你不能用字符串作为锁链。好吧,我想我知道你的意思。。。你是说你不能像我做的那样生成一个链($price\u request\u data->BTC->USD)$硬币->符号。“->美元”。换句话说,不能使用字符串组装链。这就引出了一个问题,如何在不硬编码1500条“链”的情况下引用JSON价格?
$pricereqdata=$price\u request\u data->{$coin->symbol}->USD;echo$priceleqdata应该有效。假期延迟,但我会尝试并确认。好的,我编辑了我的代码以使事情更清楚,我想我这样做回答了你所有的问题$pricereqdata包含字符串“price\u request\u data->BTC->USD”,其中BTC随循环美元硬币而变化$$pricereqdata应生成15592的值,但不会。它返回0。看看上面Jon Stirling的回答:
$pricereqdata=$price\u request\u data->{$coin->symbol}->USD;echo$priceleqdata请告诉我们您是如何解决问题的。
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)
  }
}