для отображения нежелательного результата цикла php

#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));