如何在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
相关产品推荐
相关产品推荐

