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

uqjltbpv  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(355)

大家上午/下午好,
我遇到了一个奇怪的问题,我的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\u 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\u complete列为null(调查尚未完成),则$d\u datecomp将被设置为最后一个非null值,而不是设置为null,因此可以将其设置为5个循环前的$d\u datecomp值。
这是由我从数据库中取出信息的方式造成的,还是由我在信息取出后处理信息的方式造成的?
如果上面是有点太神秘,我可以尝试解释所有单独的部分,并提供截图。

jyztefdp

jyztefdp1#

您正在示例化一个没有任何条件的datetime示例:

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

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

if (!isset($D_DateComp)){
``` `$D_DateComp` 将始终设置,它将是一个datetime示例。你的问题不在于变量共享上一次迭代的值,问题在于你的条件与你的期望不匹配。
也许你应该检查一下 `$obj['date_complete']` 是否为空?

相关问题