【问题标题】:php return stops the loopphp return 停止循环
【发布时间】:2019-02-24 03:37:05
【问题描述】:

美好的一天,我编写了一个函数,我想在其中显示与上周日期匹配的记录,但它只循环一次。有没有办法返回所有日期并显示与日期匹配的所有记录?这是我的代码。

function fetch_week(){

$today = date('F d Y');

for($i = 1; $i <= 7; $i++)
{
    $repeat = strtotime("-1 day",strtotime($today));
    $today = date('F d Y',$repeat);
    $output = '';
    $conn = mysqli_connect("localhost", "root", "", "sample");
    $sql = "SELECT * FROM list WHERE datee = '".$today."' ORDER BY id DESC";
    $result = mysqli_query($conn, $sql);
    if(empty(mysqli_num_rows($result))){
    echo '<td colspan="6"><h5><center>NO RECORDS.</center></h5></td>';
    }
    else{

    while($row = mysqli_fetch_assoc($result)){

    $output .= '<tbody id="appTable">
                <tr class="content" style="font-weight: normal text-align: center">  
                      <td>'.$row["name"].'</td>  
                      <td>'.$row["address"].'</td> 
                      <td>'.$row["contact"].'</td>
                      <td>'.$row["datee"].'</td> 
                </tr>  
             </tbody>
                      ';

    }
    return $output;
    }
}

}

【问题讨论】:

  • 您不需要 for 循环,您可以使用查询选择日期范围来执行此操作。相关 stackoverflow.com/questions/15821379/…
  • 您好,谢谢您的回复。我想问一下,如果日期格式是 2019 年 2 月 24 日,这是否有效。
  • 不确定,但您可以在运行查询之前将日期字符串转换为正确的日期格式strtotime

标签: php loops for-loop


【解决方案1】:

您可以创建一个数组并在循环结束后返回它。检查以下代码:

function fetch_week() {

    $today = date('F d Y');
    $response = [];
    for ($i = 1; $i <= 7; $i++) {
        $repeat = strtotime("-1 day", strtotime($today));
        $today = date('F d Y', $repeat);
        $output = '';
        $conn = mysqli_connect("localhost", "root", "", "sample");
        $sql = "SELECT * FROM list WHERE datee = '" . $today . "' ORDER BY id DESC";
        $result = mysqli_query($conn, $sql);
        if (empty(mysqli_num_rows($result))) {
            echo '<td colspan="6"><h5><center>NO RECORDS.</center></h5></td>';
        } else {
            $output = '<tbody id="appTable">';
            while ($row = mysqli_fetch_assoc($result)) {

                $output .= '<tr class="content" style="font-weight: normal text-align: center">  
                      <td>' . $row["name"] . '</td>  
                      <td>' . $row["address"] . '</td> 
                      <td>' . $row["contact"] . '</td>
                      <td>' . $row["datee"] . '</td> 
                </tr>';
            }
            $output .= '</tbody>';
            $response[] = $output;
        }
    }
    return $response;
}

您需要循环输出以打印数据。但除此之外,您的代码对 SQL 注入是广泛开放的。请小心并为此进行更改。此外,您不需要在循环中一次又一次地创建 tbody。您只能第一次执行此操作,我在上面的代码中也进行了更改。

希望对您有所帮助。

【讨论】:

  • 感谢您的评论,但此代码是否仅适用于整数?
  • 我不确定你用整数值问什么。但是你能告诉我你的数据库中 datee 字段的列类型吗?您可能需要将日期格式更改为$today = date('Y-m-d', $repeat);
  • 类型为 varchar。抱歉,我问这个问题是因为我收到一条通知,上面写着通知:数组到字符串的转换。
  • 您在哪一行遇到了这个问题?
  • 在if语句部分
猜你喜欢
  • 2022-01-09
相关资源
最近更新 更多