PHP替代语法无法正常运行

时间:2018-08-27 22:32:04

标签: php codeigniter

我花了几个小时为此努力,但仍然感到困惑。我有一个简单的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)

但没有任何效果。 如果有人可以提出建议,将不胜感激。

1 个答案:

答案 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或类似的东西,但这只是个人喜好。