PHP嵌套对象数组转HTML表格:无法读取odds中赔率数据
技术问题:无法读取嵌套的odds对象数据渲染HTML表格
我有一个包含嵌套odds对象的$data数组,每个元素里的odds包含1、X、2等赔率数据。用json_decode转成数组后,尝试用foreach结合list语法渲染HTML表格时,无法读取odds里的嵌套数据,导致赔率无法正常显示。
原数据结构
$data stdClass Object( [data] => Array( [0] => stdClass Object( [home_team] => Yantra Gabrovo [away_team] => Septemvri Sofia ..... [odds] => stdClass Object( [1] => 3.17 [X] => 3.24 [2] => 2.2 [1X] => 1.6 [X2] => 1.31 [12] => 1.29 ) )
我的代码
$arr = json_decode($response, true); echo '<table border=1> <tr> <th>ID</th> <th>SQUADRA CASA</th> <th>......</th> <th>QUOTA 1</th> <th>QUOTA X</th> <th>QUOTA 2</th> <th>QUOTA 1X</th> <th>QUOTA X2</th> <th>QUOTA 12</th> </tr>'; foreach ($arr["data"] as list ("id" => $id, "home_team" => $home_team, "away_team" => $away_team, "start_date" => $start_date, "last_update_at" => $last_update_at, "1" => $quota1, "x" => $quotax, "2" => $quota2, "1x" => $quota1x, "x2" => $quotax2, "12" => $quota12 )) { echo "<tr> <td>{$id}</td> .... <td>{$quota1}</td> <td>{$quotax}</td> <td>{$quota2}</td> <td>{$quota1x}</td> <td>{$quotax2}</td> <td>{$quota12}</td> </tr>"; } echo '</table>';
问题核心:数组元素中的odds是嵌套对象,当前代码直接平级去取1、x等字段,完全没访问odds层级,所以读取不到数据。
解决方案
修正思路
odds是嵌套结构,遍历数组元素时需先取出odds子数组,再从中提取对应赔率字段;list语法不适合处理嵌套结构,直接用数组索引访问更清晰。
修正后的代码
$arr = json_decode($response, true); echo '<table border=1> <tr> <th>ID</th> <th>SQUADRA CASA</th> <th>AWAY TEAM</th> <th>START DATE</th> <th>LAST UPDATE</th> <th>QUOTA 1</th> <th>QUOTA X</th> <th>QUOTA 2</th> <th>QUOTA 1X</th> <th>QUOTA X2</th> <th>QUOTA 12</th> </tr>'; // 遍历每个赛事数据 foreach ($arr["data"] as $item) { // 从嵌套的odds中提取赔率,注意键名和原数据大小写一致(原数据为X、1X等大写) $quota1 = $item['odds']['1'] ?? '-'; $quotax = $item['odds']['X'] ?? '-'; $quota2 = $item['odds']['2'] ?? '-'; $quota1x = $item['odds']['1X'] ?? '-'; $quotax2 = $item['odds']['X2'] ?? '-'; $quota12 = $item['odds']['12'] ?? '-'; echo "<tr> <td>{$item['id']}</td> <td>{$item['home_team']}</td> <td>{$item['away_team']}</td> <td>{$item['start_date']}</td> <td>{$item['last_update_at']}</td> <td>{$quota1}</td> <td>{$quotax}</td> <td>{$quota2}</td> <td>{$quota1x}</td> <td>{$quotax2}</td> <td>{$quota12}</td> </tr>"; } echo '</table>';
关键说明
- 用
$item['odds']['键名']访问嵌套赔率数据,必须和原数据键名大小写完全匹配,否则无法取值; ?? '-'做兜底处理,避免字段缺失时出现报错,显示默认占位符;- 放弃
list语法,直接通过数组索引访问字段,适配嵌套结构的同时提升代码可读性。
内容的提问来源于stack exchange,提问作者Sebastiano G.
相关产品推荐
相关产品推荐

