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

如何从blockchain接口获取final_balance并解决PHP代码报错

问题根因
  • 第一段代码报错原因:file_get_contents() 接口返回的是原始JSON字符串,并非可直接用数组下标访问的结构,对字符串执行["final_balance"]操作会触发非法字符串偏移警告。
  • 第二段代码报错原因:
    1. json_decode() 默认返回stdClass类型对象,不支持数组[]语法访问属性
    2. 变量名拼写错误:赋值时变量名为$FinalBalance,打印时写为$Final_Balance多了下划线
    3. 未匹配接口实际返回结构:该接口的final_balance字段不在JSON根节点,而是存放在addresses数组的对应地址元素下
正确实现代码

方式1:转为关联数组操作(推荐,语法更直观)

<?php
$url = "https://blockchain.info/multiaddr?active=1AT4ES3ee1N6iBzzbdK8xvcAV3CBTRKcbS|1FHcYth4LRJMwNx2y8NR5DH7sYCiVzXs3Y&n=1";
// 请求接口获取JSON字符串
$response = file_get_contents($url);
if ($response === false) {
    die("接口请求失败");
}
// json_decode第二个参数传true,直接转为关联数组
$result = json_decode($response, true);
if (json_last_error() !== JSON_ERROR_NONE) {
    die("JSON解析失败");
}

// 遍历获取所有传入地址的final_balance
foreach ($result['addresses'] as $addrInfo) {
    echo "地址:" . $addrInfo['address'] . ",final_balance值:" . $addrInfo['final_balance'] . PHP_EOL;
}

// 如果仅需要获取第一个地址的final_balance,可直接取下标
// $firstBalance = $result['addresses'][0]['final_balance'];
?>

方式2:使用对象语法操作

<?php
$url = "https://blockchain.info/multiaddr?active=1AT4ES3ee1N6iBzzbdK8xvcAV3CBTRKcbS|1FHcYth4LRJMwNx2y8NR5DH7sYCiVzXs3Y&n=1";
$response = file_get_contents($url);
if ($response === false) {
    die("接口请求失败");
}
// 不传第二个参数,返回stdClass对象
$result = json_decode($response);
if (json_last_error() !== JSON_ERROR_NONE) {
    die("JSON解析失败");
}

foreach ($result->addresses as $addrInfo) {
    echo "地址:" . $addrInfo->address . ",final_balance值:" . $addrInfo->final_balance . PHP_EOL;
}
?>

内容的提问来源于stack exchange,提问作者Zack Tim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:48:01