#php #arrays #json #for-loop
#php #массивы #json #для цикла
Вопрос:
Вывод результата для созданного мной php выглядит следующим образом :
{«результат»:[{«день»:»1″,»количество»:»0″}]}{» результат»:[{«день»:»2″, «количество»:»0″}]}….
но я хочу получить результат :
{«результат»:[{«день»: «1», «количество»:»0″},{«день»:»2″, «количество»:»0″} …]
Ниже приведен мой php-код:
<?php
define('HOST','xx');
define('USER','xx');
define('PASS','xx');
define('DB','xx');
//$month = $_POST['month'];
//$year = $_POST['year'];
$month = 10;
$year=2016;
$con = mysqli_connect(HOST,USER,PASS,DB);
$sql = "select count(entryID) from Entry where
EXTRACT(DAY FROM(entryTime)) = '$day' AND
EXTRACT(MONTH FROM(entryTime)) = '$month' AND
EXTRACT(YEAR FROM(entryTime))= '$year'";
for($day =1 ; $day<31 ; $day )
{
$day2 = (string)$day;
$res = mysqli_query($con,$sql);
$result = array();
while($row = mysqli_fetch_array($res)){
array_push($result,
array('day' =>$day2,
'count' => $row[0]
));
}
}
echo json_encode(array("result"=>$result));
mysqli_close($con);
?>
Прошу помощи..
Комментарии:
1. Правильно ли вы задали
$result = array();
в цикле for? Для меня это не имеет смысла
Ответ №1:
Первая ошибка: Вы всегда будете получать количество 0
для каждого выполняемого вами запроса, потому что ваша строка $sql
содержит неопределенную переменную $day
во время ее определения.
Вторая ошибка: Вы повторно объявляете $result
внутри своего цикла.
Решение:
$result = array();
for ($day=1 ; $day<31 ; $day ) {
$sql = "select count(entryID) from Entry where
EXTRACT(DAY FROM(entryTime)) = '$day' AND
EXTRACT(MONTH FROM(entryTime)) = '$month' AND
EXTRACT(YEAR FROM(entryTime))= '$year'";
$res = mysqli_query($con,$sql);
$day2 = (string)$day;
while($row = mysqli_fetch_array($res)) {
array_push($result,
array('day' =>$day2,
'count' => $row[0]
));
}
}
echo json_encode(array("result"=>$result));
Комментарии:
1. ya. я только что узнал, что мой счетчик всегда возвращает 0; ваш код работает! спасибо: D
Ответ №2:
проблема заключается в result = array() в цикле for, с каждой итерацией вы снова создаете результирующий массив. попробуйте определить массив перед циклом. а затем объедините каждый результат в единый результирующий массив.
ps: извините, что я не могу поделиться исправленным кодом, поскольку у меня сейчас ограниченные возможности, но я думаю, что подсказка вам поможет.
Ответ №3:
Я думаю, вам нужно $result=array()
отключить цикл for, поскольку это вообще не имеет никакого смысла. Попробуйте удалить его оттуда и поместить перед циклом for
Ответ №4:
Попробуйте установить $result = array();
перед for-loop
. Вы только что повторно инициализировали $result
каждую итерацию for-loop
:
$result = array();
for($day =1 ; $day<31 ; $day ) {
$day2 = (string)$day;
$res = mysqli_query($con,$sql);
while($row = mysqli_fetch_array($res)){
array_push($result,
array('day' =>$day2,
'count' => $row[0]
));
}
}
echo json_encode(array("result"=>$result));