PHP 如果 foreach 语句有效,但消息不显示


php if foreach statement works, but else message not displaying

我正在从我的模型中获取一个数据数组,并使用 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.";
}