php - Foreach 正在跳过一些字段
问题描述
我的 foreach 跳过了一些字段,我不知道为什么,但它跳过了我的数据库中的字段,False
这是我的代码:
$sql2="SELECT Card.*
FROM Person INNER JOIN
Card ON Person.PersonUId = Card.PersonUId
WHERE Card.PersonUId = '$id'
ORDER BY CardNr ASC";
$stm2 = $conn->query($sql2);
if(!$stm2)
{
echo "";
}else{
$rowsCabeçalho = $stm2->fetch();
$CType = isset($rowsCabeçalho['CardType']) ? $rowsCabeçalho['CardType'] : NULL;
$CNr = isset($rowsCabeçalho['CardNr']) ? $rowsCabeçalho['CardNr'] : NULL;
$CValFrom = isset($rowsCabeçalho['ValidFrom']) ? $rowsCabeçalho['ValidFrom'] : NULL;
$CValUntil = isset($rowsCabeçalho['ValidUntil']) ? $rowsCabeçalho['ValidUntil'] : NULL;
$CLTCCNr = isset($rowsCabeçalho['LastTccNr']) ? $rowsCabeçalho['LastTccNr'] : NULL;
$CLTCCTime = isset($rowsCabeçalho['LastTccTime']) ? $rowsCabeçalho['LastTccTime'] : NULL;
$CIOEntryOff = isset($rowsCabeçalho['IoCheckEntryOff']) ? $rowsCabeçalho['IoCheckEntryOff'] : NULL;
$CIOExitOff = isset($rowsCabeçalho['IoCheckExitOff']) ? $rowsCabeçalho['IoCheckExitOff'] : NULL;
$CICoded = isset($rowsCabeçalho['IsCoded']) ? $rowsCabeçalho['IsCoded'] : NULL;
$CCodingDate = isset($rowsCabeçalho['CodingDate']) ? $rowsCabeçalho['CodingDate'] : NULL;
$CPrice = isset($rowsCabeçalho['Price']) ? $rowsCabeçalho['Price'] : NULL;
$CPricePyed = isset($rowsCabeçalho['PricePayed']) ? $rowsCabeçalho['PricePayed'] : NULL;
$CDeposit = isset($rowsCabeçalho['Deposit']) ? $rowsCabeçalho['Deposit'] : NULL;
$CDepositPayed = isset($rowsCabeçalho['DepositPayed']) ? $rowsCabeçalho['DepositPayed'] : NULL;
$CLastCCode = isset($rowsCabeçalho['LastLicenseCountryCode']) ? $rowsCabeçalho['LastLicenseCountryCode'] : NULL;
$CLastLPlate = isset($rowsCabeçalho['LastLicensePlate']) ? $rowsCabeçalho['LastLicensePlate'] : NULL;
$CIOOffNextUse = isset($rowsCabeçalho['IoCheckOffNextUse']) ? $rowsCabeçalho['IoCheckOffNextUse'] : NULL;
$CLastEntryTime = isset($rowsCabeçalho['LastEntryTime']) ? $rowsCabeçalho['LastEntryTime'] : NULL;
$CLastExitTime = isset($rowsCabeçalho['LastExitTime']) ? $rowsCabeçalho['LastExitTime'] : NULL;
$CLastPTime = isset($rowsCabeçalho['LastPayTime']) ? $rowsCabeçalho['LastPayTime'] : NULL;
echo '
<div class="informaltable">
<p></p>
<table cellspacing="2" border="0">
<thead>
<tr>';?>
<?php
$tableHeaders = [
['variable' => 'CType', 'title' => 'Tipo'],
['variable' => 'CNr', 'title' => 'Nr.'],
['variable' => 'CValFrom', 'title' => 'Válido Desde'],
['variable' => 'CValUntil', 'title' => 'Válido Até'],
['variable' => 'CLTCCNr', 'title' => 'Nº Último Terminal'],
['variable' => 'CLTCCTime', 'title' => 'Hora no Último Terminal'],
['variable' => 'CIOEntryOff', 'title' => 'IO na Entrada OFF'],
['variable' => 'CIOExitOff', 'title' => 'IO na Saída OFF'],
['variable' => 'CICoded', 'title' => 'Codificado'],
['variable' => 'CCodingDate', 'title' => 'Data de Codificação'],
['variable' => 'CPrice', 'title' => 'Valor'],
['variable' => 'CPricePyed', 'title' => 'Valor Pago'],
['variable' => 'CDeposit', 'title' => 'Depósito'],
['variable' => 'CDepositPayed', 'title' => 'Depósito Pago'],
['variable' => 'CLastCCode', 'title' => 'Último País de Matricula'],
['variable' => 'CLastLPlate', 'title' => 'Última Matricula'],
['variable' => 'CIOOffNextUse', 'title' => 'IO Off Na Próxima Saída'],
['variable' => 'CLastEntryTime', 'title' => 'Última Entrada'],
['variable' => 'CLastExitTime', 'title' => 'Última Saída'],
['variable' => 'CLastPTime', 'title' => 'Último Pagamento'],
];
foreach($tableHeaders as $tableHeader) :
$variable = $tableHeader['variable'];
if (isset($$variable) AND !is_null($$variable) AND !empty(trim($$variable))) :
?>
<th align="right"><?= $tableHeader['title']; ?></th>
<?php
endif;
endforeach;
?>
$CIOEntryOff
这是db 中IoCheckEntryOff
和$CIOExitOff
db `IoCheckExitOff中的字段的 SS 。
当我到达我的 foreach 并开始以<th align="right"><?= $tableHeader['title']; ?></th>
某种方式开始踱步时,它会跳过这两行,如您在此屏幕截图中所见:
有人可以帮我解决这个问题,我不知道当它只是跳过这些False
字段时错误在哪里,因为当我将它们设置为它们时,True
它们会出现,但当它们出现时它们False
不会。
解决方案
您可以尝试删除empty
循环中的检查吗?据我所知,您的情况不包括具有 bool false 值的列。记住empty(0) === true
和empty(false) === true
。
<?php foreach($tableHeaders as $tableHeader):
$variable = $tableHeader['variable'];
if (isset($$variable) && !is_null($$variable)): ?>
<th align="right"><?= $tableHeader['title']; ?></th>
<?php endif; ?>
<?php endforeach;?>
更新
这可能有帮助吗?考虑先例的顺序,也许将其从单行中分离出来if
。这应该可以帮助您调试它。
<?php
$a = ['bool false' => false,
'empty string' => '',
'zero' => 0,
'null' => null,
'actual value' => '123'
];
foreach ($a as $k => $v) {
if ($v === 0) {
echo "$k ($v) -> ZERO";
} elseif ($v === false) {
echo "$k ($v) -> FALSE";
} elseif (is_null($v)) {
echo "$k ($v) -> NULL";
} elseif (empty($v)) {
echo "$k ($v) -> EMPTY STRING";
} else {
echo "$k ($v) -> SOME VALUE";
}
}
> bool false () -> FALSE
> empty string () -> EMPTY STRING
> zero (0) -> ZERO
> null () -> NULL
> actual value (123) -> SOME VALUE
推荐阅读
- javascript - 调试 forEach 循环以了解其工作原理
- c++ - 如何从可执行文件中删除所有调试和个人信息?
- django - 在 ModelChoiceField 或 ModelMultipleChoiceField 中搜索的最简单方法是什么?
- android - Windows 10 上的颤振医生错误:CreateProcessW 失败 5
- python - 如何在 RNN 中调整 Keras 的训练集、测试集和验证集?
- c# - 如何根据指针位置而不是玩家位置拾取物体?
- google-maps - 如何显示带有标记位置的基本地图?
- node.js - 现在如何设置 index.html?
- angularjs - ng-show 在可操作的列中不起作用
- django - Django - 无论文件扩展名如何,唯一的上传文件名