如何将AlphaVantage的JSON响应转为PHP表格行内容?
问题描述
我正在构建一个以表格形式展示股票价格的网页,使用AlphaVantage API获取数据。现有PHP代码中,需要修改foreach循环内的echo语句,将给定的Global Quote格式JSON响应转为表格行,请问具体该如何修改?
现有PHP代码
<?php $key="demo"; $url="https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=IBM&apikey=".$key; $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); $result=curl_exec($ch); curl_close($ch); $result=json_decode($result,true); if(isset($result['Global Quote'])){ echo "<table id='customers' border='1'> <tr> <th>Symbol</th> <th>Open</th> <th>High</th> <th>Low</th> <th>Price</th> <th>Volume</th> <th>Change Percent</th> </tr>"; foreach($result['Global Quote'] as $key=>$val){ echo "Need write something here"; } echo "</table>"; }else{ echo "Something went wrong"; } ?>
对应的JSON响应
{ "Global Quote": { "01. symbol": "IBM", "02. open": "121.6600", "03. high": "122.4300", "04. low": "118.6100", "05. price": "118.8100", "06. volume": "5346108", "07. latest trading day": "2022-09-30", "08. previous close": "121.6300", "09. change": "-2.8200", "10. change percent": "-2.3185%" } }
解决方案
方案一:直接提取对应字段(简洁高效)
因为表头已经固定对应特定字段,无需遍历所有键值对,直接提取JSON中匹配表头的字段值生成表格行即可,避免引入多余列。修改后的完整代码如下:
<?php $key="demo"; $url="https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=IBM&apikey=".$key; $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); $result=curl_exec($ch); curl_close($ch); $result=json_decode($result,true); if(isset($result['Global Quote'])){ $globalQuote = $result['Global Quote']; echo "<table id='customers' border='1'> <tr> <th>Symbol</th> <th>Open</th> <th>High</th> <th>Low</th> <th>Price</th> <th>Volume</th> <th>Change Percent</th> </tr>"; // 生成匹配表头的表格行 echo "<tr> <td>{$globalQuote['01. symbol']}</td> <td>{$globalQuote['02. open']}</td> <td>{$globalQuote['03. high']}</td> <td>{$globalQuote['04. low']}</td> <td>{$globalQuote['05. price']}</td> <td>{$globalQuote['06. volume']}</td> <td>{$globalQuote['10. change percent']}</td> </tr>"; echo "</table>"; }else{ echo "Something went wrong"; } ?>
方案二:使用映射数组配合foreach(灵活可扩展)
如果后续需要动态调整表头或字段,可以先定义表头与JSON键的映射关系,通过foreach循环生成单元格,便于维护:
// 替换原代码中foreach循环的部分 $globalQuote = $result['Global Quote']; // 定义需要展示的JSON字段顺序,匹配表头 $fieldMap = [ '01. symbol', '02. open', '03. high', '04. low', '05. price', '06. volume', '10. change percent' ]; echo "<tr>"; foreach($fieldMap as $jsonKey){ echo "<td>{$globalQuote[$jsonKey]}</td>"; } echo "</tr>";
这种方式下,后续要添加或调整字段,只需修改$fieldMap数组即可,无需改动HTML结构。
内容的提问来源于stack exchange,提问作者Tushar Shelke
相关产品推荐
相关产品推荐

