PHP while 循环修改最后一次迭代

3
我将尝试从PHP生成一个JSON文件。目前我有以下输出:
"students":[
    {"name": "John"},
    {"name": "Alex"},
    {"name": "Siri"},
]

每个学生后面都有一个逗号,但我明确需要去掉最后一个逗号。通常我会使用while循环和if语句来执行此操作。然而,我的数据库结构使得这种情况不同。

我的PHP代码如下:

    while ($getschools = $schools->fetch_assoc()){
        $findschools = $dbcon->query("SELECT * 
            FROM school_".$getstate['texas']."
            WHERE students = '".$studentGPA['best']."'");       
        while ($beststudents = $findschools->fetch_assoc()){
            $jsonfield.= '{"name":"'.$getstudent['firstname'].'"},';
        }
    } 

代码可能有一些缺失的部分,但希望上下文是清晰的。我使用之前的php变量从多个表中获取数据。在我的示例中,有多个对应德克萨斯州学校的表格。我正在从这些多个学校(或表格)中获取每个学生的名字。我尝试将此信息应用于JSON输出。$jsonfield行显示了我的代码循环部分。我正在尝试弄清楚如何在我的示例中实现类似于这样的代码:
$i = 0;
$countstudents = $getschools->num_rows;
if ($i < $countstudents){
$jsonfield.=',';
} 

这样,我的逗号只适用于循环的最终迭代之外的数据部分。
3个回答

5
请不要手动创建JSON。可以尝试使用以下方法:
$students = [];

// This would happen in your loop.    
$students[] = array("name" => "John");
$students[] = array("name" => "Alex");
$students[] = array("name" => "Siri");

// Feel free to drop the JSON_PRETTY_PRINT.
echo json_encode(array("students" => $students), JSON_PRETTY_PRINT) . "\n";

// Output:
// {
//     "students": [
//         {
//             "name": "John"
//         },
//         {
//             "name": "Alex"
//         },
//         {
//             "name": "Siri"
//         }
//     ]
// }

是的,有一个现成的PHP函数可以生成JSON字符串,无需手动操作JSON文件。 - Eng Cy

2
您有两个选项: 方法1: rtrim 使用rtrim($jsonfield, ',') 方法2: implode$jsonfield添加为数组 - $jsonfield[]=....,然后使用implode(',', $jsonfield)
重要提示:
除此之外,你为什么想要使用循环来生成JSON呢?你可以使用json_encode函数。

1
 while ($getschools = $schools-            >fetch_assoc()){ 
 $findschools = $dbcon->query("SELECT *     FROM school_".$getstate['texas']." WHERE      students = '".$studentGPA['best']."'"); 
   while ($beststudents = $findschools->fetch_assoc()){
  $jsonfield.= '{"name":"'.$getstudent['firstname'].'"},';
 $i = 0; 
 $countstudents = $getschool->num_rows;                  
if($i+1 < $countstudents){  //if next index is    smaller than the count then add comma else don't and loop will be terminated
    $jsonfield.=','; 
      }
   }
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接