【发布时间】:2017-12-21 23:22:35
【问题描述】:
我一直试图理解和解决这个问题。我想我很接近,因为我怀疑我只是错误地引用了我的 json 数据,但我不知道如何正确地做到这一点。这是用例。
我正在构建一个简单的分类帐系统来跟踪加密交易。该系统还对硬币总数进行了一些很好的统计,以美元计算硬币价值,并计算整体投资组合价值等。
我让用户跟踪他们选择的硬币,这些硬币位于一个名为 $coins 的数组中。 $coins 数组之前在我的代码中通过数据库调用进行了初始化,其中包含 $coin->ID 和 $coin->symbol。
为了确定美元的硬币价值,我使用他们的 API 调用 CryptoCompare,在从我的 $coins 数组中获取硬币符号后,它看起来像这样:
https://min-api.cryptocompare.com/data/pricemulti?fsyms=ADA,BTC,ETH,LTC&tsyms=USD
只需将该 URL 弹出到浏览器中以设置 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,并且我知道一些参考规则已更改,但我无法确定这是否是我的问题。我发誓这只是我用变量引用它的方式,但我没有足够的经验知道为什么。
非常感谢任何智慧。
【问题讨论】:
-
你不能使用字符串作为链。
-
好吧,我想我明白你的意思了......你是说你不能像我那样生成一个链( $price_request_data->BTC->USD )“price_request_data-> ” 。 $硬币->符号。 “->美元”。换句话说,您不能使用字符串组装链条。那么问题来了,如果没有硬编码 1500 个“链”,您如何参考 JSON 价格?
-
$pricereqdata = $price_request_data->{$coin->symbol}->USD; echo $pricereqdata;应该可以工作。 -
假期延迟,但我会尝试确认。
标签: php json dynamic-variables