Альтернативный синтаксис PHP не работает должным образом - PullRequest
0 голосов
/ 28 августа 2018

Я провел несколько часов, борясь с этим, но все еще сбит с толку. У меня есть простое утверждение 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; ?>

$ авторов - это результат поиска в базе данных (с использованием класса построителя запросов Codeigniter, хотя это не актуально), и поэтому я считаю массив объектов. Если он находит данные, код работает нормально. Однако, если поиск ничего не дает, «Авторы не найдены» не отображаются. Var_dump из $ авторов после нулевого поиска дает:

    array (size=0)
     empty

Я также пытаюсь записать условие if как:

(!isset($authors))
(empty($authors))
($authors == null)

но ничего не работает. Благодарен, если кто-нибудь может подсказать, что происходит.

1 Ответ

0 голосов
/ 28 августа 2018

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 s, код никогда не будет достиг. Вы хотите проверить пустоту перед тем, как попытаться выполнить итерацию, и только один раз, если на то пошло.

И хотя я считаю, что !$authors должен работать для пустых массивов, я бы, вероятно, использовал empty($authors) или count($author) == 0 или что-то подобное, чтобы быть более явным, но это всего лишь личное предпочтение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...