【问题标题】:for loop display undesired result phpfor循环显示不需要的结果php
【发布时间】:2016-10-15 15:00:54
【问题描述】:

我创建的 php 结果的输出是这样的:

{"result":[{"day":"1","count":"0"}]}{"result":[{"day":"2","count":"0" }]}....

但我想要结果的输出:

{"结果":[{"day":"1","count":"0"},{"day":"2","count":"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);

 ?>

寻求帮助..

【问题讨论】:

  • 在for循环中设置$result = array();是否正确?这对我来说没有意义

标签: php arrays json for-loop


【解决方案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));

【讨论】:

  • 是的。我刚刚发现我的计数总是返回 0;您的代码正在运行!谢谢你:D
【解决方案2】:

问题在于 for 循环中的 result = array() ,每次迭代都会再次创建结果数组。尝试在循环之前定义数组。 然后将每个结果合并到单个结果数组中。

ps:很抱歉我不能分享一个更正的代码,因为我现在能力有限,但我想这个线索会对你有所帮助。

【讨论】:

    【解决方案3】:

    我认为您需要将 $result=array() 从 for 循环中移除,因为它根本没有任何意义。尝试从那里删除它并将其放在 for 循环之前

    【讨论】:

      【解决方案4】:

      尝试在for-loop 之前设置$result = array();。您只需在 for-loop 的每次迭代中重新初始化 $result

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

      【讨论】:

        猜你喜欢
        • 2013-06-27
        • 2020-06-09
        • 2015-02-24
        • 1970-01-01
        • 1970-01-01
        • 2021-03-05
        • 2021-01-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多