У меня есть таблица базы данных MySQL, СТУДЕНТ в следующем формате:
ID NAME PLACE MARKS
1 John NYC 62/115
2 Rose SF 43/45
3 Alex DC 54/75
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
50 Adam NYC 88/96
Я пытаюсь создать сообщение JSON, извлекая данные из этой таблицы с помощью php. Требуемое сообщение JSON должно быть:
[{"NAME":"John","ID":"1","PLACE":"NYC","MARKS":"62/115","PERCENTAGE":"53.91%"},{"NAME":"Rose","ID":"2","PLACE":"SF","MARKS":"43/45","PERCENTAGE":"95.56%"},{"NAME":"Alex","ID":"3","PLACE":"DC","MARKS":"54/75","PERCENTAGE":"72%"},.........,{"NAME":"Adam","ID":"50","PLACE":"NYC","MARKS":"88/96","PERCENTAGE":"91.67%"}]
Я написал следующий код:
<!DOCTYPE html>
<meta charset = "UTF-8">
<head>
<style>
</style>
</head>
<?php
$servername = "test.server.com";
$username = "test_user";
$password = "test_pass";
$dbname = "test_db";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "select NAME, ID, PLACE, MARKS from STUDENT;";
$temp = array();
$result = $conn->query($sql);
while($row=$result->fetch_assoc())
{
$temp[] = $row;
$number = $row["MARKS"];
$pieces = explode("/", $number);
if ($pieces[1] <> 0) {
$per = round((($pieces[0]/$pieces[1])*100),2);
}
else { $per = 'Undefined';}
$temp1= json_encode($temp).($temp[]['percentage']=$per);
}
$testjson= json_encode($temp1);
echo $testjson;
mysqli_close($conn);
?>
С помощью приведенного выше кода я получаю следующий результат:
"[{\"NAME\":\"John\",\"ID\":\"1\",\"PLACE\":\"NYC\",\"MARKS\":\"62\\/115\"},{\"percentage\":53.91},{\"NAME\":\"Rose\",\"ID\":\"2\",\"PLACE\":\"SF\",\"MARKS\":\"43\\/45\"},{\"percentage\":95.56},{\"NAME\":\"Alex\",\"ID\":\"3\",\"PLACE\":\"DC\",\"MARKS\":\"54\\/75\"},{\"percentage\":72},..........,{\"NAME\":\"Adam\",\"ID\":\"50\",\"PLACE\":\"NYC\",\"MARKS\":\"88\\/96\"}]91.67"
Вышеуказанный формат искажен.
Как я могу вычислить процент от оценок на лету и включить его в сообщение JSON в моем требуемом формате? Пожалуйста помоги!






<!DOCTYPE html>
<meta charset = "UTF-8">
<head>
<style>
</style>
</head>
<?php
$servername = "test.server.com";
$username = "test_user";
$password = "test_pass";
$dbname = "test_db";
$conn = new mysqli($servername, $username, $password,$dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "select NAME, ID, PLACE, MARKS from STUDENT;";
$temp = array();
$result = $conn->query($sql);
while($row=$result->fetch_assoc())
{
$number = $row["MARKS"];
$pieces = explode("/", $number);
if ($pieces[1] <> 0) {
$per = round((($pieces[0]/$pieces[1])*100),2);
}else { $per = 'Undefined';}
$row['percentage'] = $per; // add percentage to row
$temp[] =$row; // add row with percentage to temp array
}
$testjson= json_encode($temp1); // note that we only run json_encode once
echo $testjson;
mysqli_close($conn);
?>
попробуйте код выше.
Вы дважды звоните
json_encode(), не делайте этого. Создайте объект, который вы хотите закодировать внутри цикла, а затем закодируйте его.