如何在PHP中遍历JSON多对象数组并实现表格两次循环展示?
我明白你的问题了——你的JSON数组里是两个结构完全不同的对象,直接用同一个循环遍历所有字段肯定会触发未定义字段的警告,因为第一个对象没有pelast4q和amount,第二个对象没有newdate、closerate这些字段。
要实现两次循环分别处理这两组数据,你可以把数组拆分成两个独立的部分,分别遍历处理对应的字段。下面是具体的代码实现:
方案代码
// 先解析JSON字符串为PHP数组(假设你已经完成这一步) $data = json_decode($yourJsonString, true); echo "<table>"; // 第一次循环:处理第一组数据(价格、市值、股份相关字段) foreach (array_slice($data, 0, 1) as $nt) { echo "<tr class='table_row_grey'> <td><strong>Price Date</strong></td> <td>{$nt['newdate']}</td> </tr>"; echo "<tr class='table_row_white'> <td><strong>Close Price</strong></td> <td>PKR</td> <td>" . number_format($nt['closerate'], 2) . "</td> </tr>"; echo "<tr class='table_row_grey'> <td><strong>Shares</strong></td> <td>Mn</td> <td>" . number_format($nt['out_share'], 2) . "</td> </tr>"; echo "<tr class='table_row_white'> <td><strong>M.Cap</strong></td> <td>PKR Mn</td> <td>" . number_format($nt['mcap'], 0) . "</td> </tr>"; } // 第二次循环:处理第二组数据(P/E、Amount字段) foreach (array_slice($data, 1, 1) as $nt) { echo "<tr class='table_row_grey'> <td><strong>P/E</strong></td> <td>Trailing (4Q)</td> <td>" . number_format($nt['pelast4q'], 2) . "</td> </tr>"; // 新增Amount字段的展示(如果需要的话) echo "<tr class='table_row_white'> <td><strong>Amount</strong></td> <td>PKR</td> <td>" . number_format($nt['amount'], 2) . "</td> </tr>"; } echo "</table>";
代码说明
array_slice的作用:用这个函数分别截取JSON数组的第一个元素(索引0)和第二个元素(索引1),把两个结构不同的对象拆分开,避免交叉访问不存在的字段。- 两次独立循环:第一次循环只处理第一组的价格、市值等字段,第二次循环只处理第二组的P/E和Amount字段,彻底解决字段未定义的问题。
- 可选优化:如果你的JSON数组未来可能有更多同结构的对象,也可以根据字段是否存在来判断(比如用
isset($nt['newdate'])),但针对当前只有两个对象的场景,拆分循环的方式更直接清晰。
内容的提问来源于stack exchange,提问作者faizan
相关产品推荐
相关产品推荐

