早上好/下午好,
我遇到一个奇怪的问题,似乎我的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值。
这是由于我将信息从数据库中拉出的方式引起的,还是由于信息一旦出局就处理了?
如果以上内容过于神秘,我可以尝试解释所有单独的部分并提供屏幕截图。
答案 0 :(得分:2)
您要实例化DateTime实例而没有任何条件:
$D_DateComp = new datetime ($obj['date_complete']);
然后检查是否设置了此变量:
if (!isset($D_DateComp)){
$D_DateComp
将始终被设置,它将是一个DateTime实例。您的问题不是该变量共享上一个迭代的值,而是您的条件与您的期望不符。
也许您应该检查$obj['date_complete']
是否为空?