You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP从嵌套数组中获取API返回的指定数据?

解决Ethplorer API嵌套JSON数据提取问题

我来帮你搞定这个嵌套JSON数据提取的问题!你之前的代码主要是在处理tokenInfo的时候多套了一层不必要的循环,咱们一步步修正:

首先,ETH的balance字段就在返回数据的最外层ETH对象里,直接访问即可,不需要进入循环:

// 获取并输出ETH余额
echo "ETH Balance: " . $scan_array['ETH']['balance'] . "<br>";

然后是代币部分,你之前对tokenInfo做了额外的foreach循环,但其实tokenInfo是一个单关联数组(不是数组的集合),直接通过键名就能提取address、name、price这些字段。另外为了避免API返回数据缺失导致报错,建议加上isset()判断做兼容。

以下是完整的修正代码:

$address = "0x64890972513558cb4e4b4a7f8af48d892fd097b7"; // 可替换为$_POST['address']
$scan_url = 'https://api.ethplorer.io/getAddressInfo/'.$address.'?apiKey=freekey';
$scan_json = file_get_contents($scan_url);
$scan_array = json_decode($scan_json, true);

// 输出ETH的balance字段
if (isset($scan_array['ETH']['balance'])) {
    echo "ETH Balance: " . $scan_array['ETH']['balance'] . "<br><br>";
}

// 遍历tokens数组,提取每个代币的指定字段
if (isset($scan_array['tokens']) && is_array($scan_array['tokens'])) {
    foreach($scan_array['tokens'] as $token) {
        if (isset($token['tokenInfo'])) {
            $tokenInfo = $token['tokenInfo'];
            echo "Token Address: " . $tokenInfo['address'] . "<br>";
            echo "Token Name: " . $tokenInfo['name'] . "<br>";
            // 兼容price字段为false的情况,实际API可能返回带rate的对象
            echo "Token Price: " . ($tokenInfo['price'] !== false ? $tokenInfo['price']['rate'] : 'No price available') . "<br>";
            echo "------------------------<br>";
        }
    }
}

代码关键点说明:

  • 加入isset()和is_array()判断,防止API返回数据不完整时出现PHP警告
  • 直接访问$token['tokenInfo']下的字段,去掉了多余的内层循环
  • 对price字段做了兼容处理,因为它可能返回false(无价格数据)或者包含具体价格信息的对象

内容的提问来源于stack exchange,提问作者Mohammed Darwish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:46:20