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

如何在PHP While循环中高效处理数组?SQLite3列名数组构建问题

问题:PHP SQLite3获取表完整列名数组异常

我在PHP SQLite3中有一个包含a、b、c列的students表,想要构建一个包含这些列名的数组。但获取列名并编码为JSON后,得到的输出是:

["a"]["a","b"]["a","b","c"]

我的目标是得到形如["a","b","c"]的数组,或者提取上述输出中最后一个方括号内的内容。想知道哪里出了问题,以及如何得到所需输出?

我的PHP代码如下:

<?php
// Database name
$database_name = "my_sqlite.db";

// Database Connection
$db = new SQLite3($database_name);

// Create Table "students" into Database if not exists
$query = "CREATE TABLE IF NOT EXISTS students (a STRING, b STRING, c STRING)";
$db->exec($query);
?>
<?php
$tablesquery = $db->query("PRAGMA table_info(students);"); 
while ($table = $tablesquery->fetchArray(SQLITE3_ASSOC)) { 
    //$r[] = $table['Field'];
    $ary[] = $table["name"];
    $colns = json_encode($ary);
    echo $colns;               

    //this gives ["a"]["a","b"]["a","b","c"]
    //my desired output ["a","b","c"];
}

?>

解决方案

问题出在你把json_encode和echo放在了while循环内部。每次循环都会把当前已收集的列名数组编码并输出,所以第一次循环输出["a"],第二次输出["a","b"],第三次输出["a","b","c"],三者连起来就成了你看到的结果。

只需要把编码和输出的代码移到循环外面,让循环只负责收集所有列名,循环结束后再处理完整的数组即可:

修改后的代码:

<?php
// Database name
$database_name = "my_sqlite.db";

// Database Connection
$db = new SQLite3($database_name);

// Create Table "students" into Database if not exists
$query = "CREATE TABLE IF NOT EXISTS students (a STRING, b STRING, c STRING)";
$db->exec($query);

$tablesquery = $db->query("PRAGMA table_info(students);"); 
$ary = []; // 先初始化数组,避免未定义变量
while ($table = $tablesquery->fetchArray(SQLITE3_ASSOC)) { 
    $ary[] = $table["name"];
}
// 循环结束后再编码并输出完整数组
$colns = json_encode($ary);
echo $colns; // 输出:["a","b","c"]
?>

这样就能得到你想要的["a","b","c"]输出了。

内容的提问来源于stack exchange,提问作者Abednego Nasila

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:20:16