Почему моя переменная переменная не ссылается на данные json?

Я пытался понять и решить эту проблему без конца. Я думаю, что я близок в этом, я подозреваю, что я просто неправильно ссылаюсь на свои данные JSON, но я не могу понять, как сделать это правильно. Вот пример использования.

Я строю простую систему бухгалтерского учета для отслеживания крипто-транзакций. Система также подсчитывает общие суммы монет, рассчитывает стоимость монет в долларах США, рассчитывает общую стоимость портфеля и т. Д.

Я позволил пользователю отслеживать монеты по своему выбору, которые находятся в массиве под названием $ coins. Массив $ coins был инициализирован ранее в моем коде через вызов базы данных и содержит $ coin-> ID и символ $ coin->.

Чтобы определить стоимость монет в долларах США, я обращаюсь к CryptoCompare с помощью их API, который после получения символов монет из моего массива $ coins выглядит примерно так:

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

Просто вставьте этот URL в браузер, чтобы просмотреть результаты задавать.

$ price_request_data хранит эти данные после декодирования.

Теперь моя проблема возникает, когда я пытаюсь ссылаться на данные JSON через мой цикл $ coins. Я могу просто ссылаться на данные, если использую прямую ссылку, такую ​​как:

$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:

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

Решение

ХОРОШО:

Q: Соответствует ли $ price_request_data {"ADA":{"USD":0.4738},"BTC":{"USD":15486.46},"ETH":{"USD":786.47},"LTC":{"USD":306.48}} (или эквивалент)?

<= Ваш комментарий «// РАБОТАЕТ» подразумевает «да»

Q: Где инициализируется «$ coin»? Какова его ценность?

Q: Что такое значение «$ pricereqdata»?

В: Создает ли $$ pricereqdata новую переменную для вас? Что это? Какова его ценность?

Другими словами, что именно вы подразумеваете под «// FAILS» ???

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]