PHP遍历数组生成动态变量仅返回单组结果,如何循环读取动态变量
问题根因
你当前代码的问题是外层遍历$res中每组数据时,会重复覆盖$var数组内的相同键名,最终$var只会保留最后一组的取值,因此仅能输出一组结果。同时extract()方法会把数组键转换为全局变量,同键名的情况下也只会保留最后一组的值,完全不适用多组同结构数据的存储场景。
修正方案
首先调整数据存储结构,用二维数组保存所有组的完整数据,避免覆盖:
// 初始化二维数组存储全部组数据 $allData = []; foreach( $res as $obj ){ $values = $obj->values; $currentRow = []; foreach( $values as $k => $o ){ $currentRow['var'.$k] = $o->value; } // 把当前组数据追加到总数组,不会覆盖之前的内容 $allData[] = $currentRow; }
遍历输出所有数据
如果需要输出你预期的分行结果,直接遍历二维数组即可:
foreach($allData as $row){ // 按需调整变量输出顺序、添加换行 echo $row['var0'] . "<br>"; echo $row['var1'] . "<br>"; echo $row['var2'] . "<br>"; echo $row['var3'] . "<br>"; echo $row['var4'] . "<br>"; echo $row['var5'] . "<br>"; echo $row['var6'] . "<br>"; echo $row['var7'] . "<br>"; echo $row['var8'] . "<br>"; echo $row['var9'] . "<br>"; echo $row['var10'] . "<br>"; // 两组之间加空行分隔 echo "<br><br>"; }
自定义表格实现
如果要构建可调整顺序、合并单元格、设置链接的表格,直接在遍历中自定义布局即可,示例如下:
<table border="1" cellpadding="8"> <thead> <tr> <th>国家</th> <th>活动主题</th> <th>主办/地点</th> <th>活动时间</th> <th>报名链接</th> </tr> </thead> <tbody> <?php foreach($allData as $row): ?> <tr> <!-- 单变量对应单单元格 --> <td><?php echo $row['var0']; ?></td> <td><?php echo $row['var1']; ?></td> <!-- 多个变量合并到同一个单元格 --> <td><?php echo $row['var2'] . ' ' . $row['var3']; ?></td> <td><?php echo $row['var6'] . ' ' . $row['var7']; ?></td> <!-- 变量设置为链接 --> <td><a href="<?php echo $row['var5']; ?>"><?php echo $row['var10']; ?></a></td> </tr> <?php endforeach; ?> </tbody> </table>
该方案不需要生成全局动态变量,后续调整字段顺序、修改展示规则只需要调整遍历内的输出代码即可,灵活性更高。
内容的提问来源于stack exchange,提问作者Mark Wroblewski
相关产品推荐
相关产品推荐

