如何将PHP数组正确编码为JSON用于JavaScript自动补全表单
问题描述
我正在开发一个允许用户搜索学校的自动补全表单,需要如下格式的JavaScript数组:
var school = ["School1", "School2"]; /* JS, wanted output */
我的PHP代码如下:
<?php require_once('config.php'); try { $stmt = $db->query('SELECT * FROM school ORDER BY naam ASC'); while ($row = $stmt->fetch()) { $school = '' . $row['naam'] . ''; $schools = array("$school"); echo json_encode($schools); } } catch (PDOException $e) { echo $e->getMessage(); } ?>
但当前输出为:
["!mpulse Kollum, school van OSG Piter Jelles"]["!mpulse Leeuwarden, school van OSG Piter Jelles"]["'s Gravendreef College Henri Faasdreef"]
期望输出是:
["!mpulse Kollum, school van OSG Piter Jelles", "!mpulse Leeuwarden, school van OSG Piter Jelles", "'s Gravendreef College Henri Faasdreef"]
请问如何修正PHP代码以得到正确的JSON格式?
修正方案
你的代码问题在于每次循环都会创建一个仅包含单个学校名称的新数组,并直接输出该数组的JSON,导致最终输出是多个独立的JSON数组拼接,而非一个完整的包含所有元素的数组。
修正步骤:
- 先初始化一个空数组,用于存储所有学校名称
- 在循环内部,将每个学校名称追加到这个数组中
- 循环结束后,一次性对整个数组执行
json_encode并输出
修正后的PHP代码:
<?php require_once('config.php'); try { // 初始化空数组 $schools = []; $stmt = $db->query('SELECT naam FROM school ORDER BY naam ASC'); while ($row = $stmt->fetch()) { // 将每个学校名称追加到数组 $schools[] = $row['naam']; } // 循环结束后输出完整的JSON数组 echo json_encode($schools); } catch (PDOException $e) { echo $e->getMessage(); } ?>
额外优化:SQL查询中只选择需要的naam字段,避免查询不必要的数据,提升性能。
内容的提问来源于stack exchange,提问作者Tillie
相关产品推荐
相关产品推荐

