PHP替代语法无法正常工作

Mik*_*ath 0 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; ?>
Run Code Online (Sandbox Code Playgroud)

$ authors是数据库搜索的结果(使用Codeigniter查询构建器类,虽然我不相关),因此我相信一个对象数组.如果它找到数据,代码工作正常.但是,如果搜索没有返回任何内容,则"未找到作者"不会显示.在零搜索之后,$ authors的var_dump给出:

    array (size=0)
     empty
Run Code Online (Sandbox Code Playgroud)

我也尝试将if条件写为:

(!isset($authors))
(empty($authors))
($authors == null)
Run Code Online (Sandbox Code Playgroud)

但没有任何作用.感激如果有人能提出正在发生的事情.

Dec*_*ler 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; ?>
Run Code Online (Sandbox Code Playgroud)

在您的原始示例中,您$authors在每次迭代中测试了数组的空白foreach,但由于foreach不对空iterables 进行迭代,因此永远不会到达代码.尝试迭代之前,你想要测试空虚,并且只想测试一次.

虽然我认为!$authors应该适用于空阵列,但我可能会使用empty($authors)count($author) == 0类似的东西更明确,但这只是个人偏好.