我花了几个小时为此努力,但仍然感到困惑。我有一个简单的if else语句,如下所示:
<?php foreach($authors as $author): ?>
<?php if (!$authors): ?>
<p>No authors found</p>
<?php else: ?>
<p><a href="<?= base_url('pages/author/'.$author->id); ?>"><?= $author->name; ?></a></p>
<?php endif; ?>
<?php endforeach; ?>
$ authors是数据库搜索的结果(尽管我认为不相关,但使用Codeigniter查询构建器类),因此,我相信是一组对象。如果找到数据,则代码可以正常工作。但是,如果搜索未返回任何内容,则不会显示“未找到作者”。在无搜索后,$ authors的var_dump给出:
array (size=0)
empty
我也尝试将if条件写为:
(!isset($authors))
(empty($authors))
($authors == null)
但没有任何效果。 如果有人可以提出建议,将不胜感激。
答案 0 :(得分:5)
if(!$authors)
应该放在foreach
循环之前,即将foreach
循环放在else
块中,如下所示:
<?php if (!$authors): ?>
<p>No authors found</p>
<?php else: ?>
<?php foreach($authors as $author): ?>
<p><a href="<?= base_url('pages/author/'.$author->id); ?>"><?= $author->name; ?></a></p>
<?php endforeach; ?>
<?php endif; ?>
在您的原始示例中,您在$authors
的每次迭代中测试了foreach
数组的空性,但是由于foreach
不会对空的iterable
进行迭代,因此代码永远不会到达。为此,您想测试 尝试重复之前的空度。
尽管我相信!$authors
应该适用于空数组,但为了更明确一点,我可能会使用empty($authors)
或count($author) == 0
或类似的东西,但这只是个人喜好。