2017-07-06 9 views
3

PHPからJSONファイルを生成しようとしています。これまでのところ、次の出力があります。PHP whileループが最後の反復を変更します

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

最後のカンマを削除する必要があるときに、各学生の後にカンマがあります。通常、if文でwhileループを実行します。しかし、私のデータベース構造は、この状況を変えます。

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コードはそうのように見えます。私は複数のテーブルからデータを取得するために、以前のフェッチ要求からPHP変数を使用しています。

私の例では、テキサス州の学校に対応する複数のテーブルがあります。私はそれらの複数の学校(またはテーブル)からすべての生徒のファーストネームを取得しています。この情報をJSON出力に適用しようとしています。

の行は、私のコードのループ部分を示しています。私は私の例では、このようなコードを実装する方法を把握しようとしています:

$i = 0; 
$countstudents = $getschools->num_rows; 
if ($i < $countstudents){ 
$jsonfield.=','; 
} 

私のコンマは私のループの最後の繰り返しではない私のデータの部分に適用されているこの方法では。

答えて

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" 
//   } 
//  ] 
// } 
+0

いいえ、json文字列を生成するための準備ができたphp関数があります。手動でjsonファイルを操作する必要はありません –

2

あなたは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.=','; 
     } 
    } 
} 
関連する問題