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