我正在从我的模型中获取一个数据数组,并使用 php foreach 语句在视图中显示它。我添加了另一层逻辑以仅显示某些bookmark_ids。
数据显示正常;但由于某种原因,如果没有返回数据,则不会显示"else"消息(与第一个 if 子句相关联)。我需要弄清楚如何显示该消息。
<?php
if ($bookmark):
foreach($bookmark as $b): ?>
<?php if ($b->bookmark_id != 0) { ?>
<li><?php echo $bk->user_id; ?> <?php echo $bk->bookmark_name; ?></li>
<?php } ?>
<?php
endforeach;
else:
print "Your bookmark list is empty.";
endif;
?>
你测试$bookmark是否存在!我假设它始终存在,要么是空的,要么是带有值数组的!
试试这个:
<?php
if (is_array($bookmark) && count($bookmark)>=1):
foreach($bookmark as $b): ?>
<?php if ($b->bookmark_id != 0) { ?>
<li><?php echo $bk->bookmark_name; ?></li>
<?php } ?>
<?php
endforeach;
else:
print "Your bookmark list is empty.";
endif;
?>
阅读: PHP is_array() | 计数()
编辑
与最近发布的评论"是的,数组正在返回结果;我正在使用第二个 if 语句来限制显示的内容。听起来我的 else 语句应该绑定到第二个 if 子句,而不是第一个。对我来说,问题不在于是否有结果;而是过滤结果后是否还剩下什么。
<?php
// reset variable
$count = 0;
// if it is an array and is not empty
if (is_array($bookmark) && count($bookmark)>=1):
foreach($bookmark as $b):
if ($b->bookmark_id != 0) {
echo '<li>' . $bk->bookmark_name . '</li>';
} else {
$count++; // no data, increase
}
// check if the counter was increased
if ($count>=1) {
print "Your bookmark list is empty.";
}
endforeach;
else:
print "bookmark not found.";
endif;
?>
出于某种原因,$bookmark
评估为真。由于空字符串和数组在 PHP 中的计算结果已经为 false,我们可以合理地假设 $bookmark
实际上是一个对象。由于我们可以迭代它 foreach
,它可能是 ArrayObject 的一个实例,或者一个扩展它的类。我们可以通过编写以下命令来调试确切的$bookmark
类型:
var_dump($bookmark);
由于空对象实例在 PHP 条件中的计算结果为 true,因此我们需要更具体地说明要检查的内容。
if(count($bookmark) > 0):
这应该会正确触发 else 条件。作为旁注,您应该正确缩进代码。:)
if (is_array($bookmark) && !empty($bookmark)) {
foreach ($bookmark as $item) {
...
}
} else {
echo "Your bookmark list is empty.";
}