PHP如何插入关联数组?pg_fetch_array循环为何仅返回最后一条记录
问题原因
你当前代码的循环逻辑存在覆盖赋值问题:每次遍历查询结果行时,直接对$list变量重新赋值,前一轮循环存入的内容会被新值覆盖,循环结束后变量自然只会保留最后一条记录的pedro。
修复方案
提前初始化空数组存储全量结果,循环时将每行的值追加到数组中,而非直接覆盖变量,参考代码如下:
if (!$result) { echo "An error occurred.\n"; exit; } // 初始化空数组承载所有查询结果 $nameList = []; // 推荐用pg_fetch_assoc直接获取纯关联数组,省去多余的数字索引 while($row = pg_fetch_assoc($result)) { // 用[]语法向数组尾部追加当前行的值,不会覆盖历史数据 $nameList[] = $row['list']; } pg_free_result($result);
执行完成后,$nameList就是包含全部结果的数组,结构如下:
[ 0 => 'Luis', 1 => 'Carlos', 2 => 'Pedro' ]
如果要生成你预期的无序列表,遍历该数组输出即可:
echo '<ul>'; foreach ($nameList as $name) { // 输出到页面前用htmlspecialchars转义,避免特殊字符引发页面异常或XSS风险 echo '<li>' . htmlspecialchars($name) . '</li>'; } echo '</ul>';
补充说明:如果你使用的是
pg_fetch_array()且未指定第二个参数,默认会同时返回数字索引和关联索引两份数据,内存占用更高,仅需要关联字段时优先用pg_fetch_assoc()更高效。
内容的提问来源于stack exchange,提问作者Alicia Gomez
相关产品推荐
相关产品推荐

