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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:54:03