我试图理解并彻底解决这个问题。我认为我很接近,因为我怀疑我只是错误地引用了我的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,我知道一些参考规则发生了变化,但我无法确定这是否是我的问题。我发誓这只是我用变量引用它的方式,但我没有足够的经验来知道原因。
非常感谢任何智慧。
答案 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”???