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

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层级,所以读取不到数据。

解决方案

修正思路

  1. odds是嵌套结构,遍历数组元素时需先取出odds子数组,再从中提取对应赔率字段;
  2. 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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 21:27:36