PHP foreach循环记住最后一个循环变量

时间:2018-07-16 01:23:47

标签: php html mysql

早上好/下午好,

我遇到一个奇怪的问题,似乎我的foreach循环之一正在记住上一个循环中的变量。

这是有问题的循环:

foreach($result as $obj) {
    $S_MatterNum = $obj['matter_num'];
    $S_SurveyName = $obj['longname'];
    $D_DateSubmit = new datetime($obj['date_submit']);
    $D_DateComp = new datetime ($obj['date_complete']);
    echo "<tr id=" . $S_MatterNum . ">";
    echo '<td>' . $S_MatterNum . '</td>';
    echo '<td>' . $S_SurveyName . '</td>';
    echo '<td>' . $D_DateSubmit->format('d/m/Y') . ' & '. $D_DateComp->format('d/m/Y') .'</td>';
    if (!isset($D_DateComp)){
        $D_DateComp = 'Not Completed Yet';
        echo '<td>' . $D_DateComp . '</td>';
        echo '<td></td>';
    } else {
        echo '<td>' . $D_DateComp->format('d/m/Y'). '</td>';
        echo '<td><button onclick="pullsurvey('.$S_MatterNum.')">Pull</button></td>';
    }
    echo "</tr>";
}

我遇到的问题是$ D_DateComp变量。 该循环从以下位置获取其信息:

$SQL = "SELECT * FROM survey_list INNER JOIN survey_names ON survey_list.survey_name = survey_names.shortname";
$result = mysqli_query($con,$SQL);
if ($result === false) {
        echo("Error: " . $SQL . "<br>" . $con->error);
}
if (mysqli_num_rows($result) == 0) {
    $result = mysqli_fetch_all($result,MYSQLI_ASSOC);
}

现在,如果表中的date_complete列为NULL(调查尚未完成),则将$ D_DateComp设置为最后一个非NULL值,而不是将其设置为NULL,因此可以将其设置为5个循环前的$ D_DateComp值。

这是由于我将信息从数据库中拉出的方式引起的,还是由于信息一旦出局就处理了?

如果以上内容过于神秘,我可以尝试解释所有单独的部分并提供屏幕截图。

1 个答案:

答案 0 :(得分:2)

您要实例化DateTime实例而没有任何条件:

$D_DateComp = new datetime ($obj['date_complete']);

然后检查是否设置了此变量:

if (!isset($D_DateComp)){

$D_DateComp将始终被设置,它将是一个DateTime实例。您的问题不是该变量共享上一个迭代的值,而是您的条件与您的期望不符。

也许您应该检查$obj['date_complete']是否为空?