2

モデルからデータの配列を取得しており、phpforeachステートメントを使用してビューに表示しています。特定のbookmark_idのみを表示するロジックの別のレイヤーを追加しています。

データは正常に表示されています。しかし、何らかの理由で、データが返されない場合、「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;

?>
4

3 に答える 3

6

$ 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() | カウント()

編集済み

最近投稿されたコメントに関連して 「はい、配列は結果を返します。表示される内容を制限するために2番目のifステートメントを使用しています。elseステートメントは最初のif句ではなく2番目の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;

?>
于 2012-05-12T23:55:15.153 に答える
0

何らかの理由で、$bookmark真と評価しています。$bookmarkPHPでは空の文字列と配列はすでにfalseと評価されているため、実際にはそれがオブジェクトであると合理的に推測できます。で繰り返すことができるのでforeach、おそらくArrayObjectのインスタンス、またはそれを拡張するクラスです。$bookmark次のように記述して、正確なタイプをデバッグできます。

var_dump($bookmark);

PHPの条件付きでは、空のオブジェクトインスタンスがtrueと評価されるため、チェック対象についてより具体的にする必要があります。

if(count($bookmark) > 0):

これにより、else条件が適切にトリガーされます。ちなみに、コードを適切にインデントする必要があります。:)

于 2012-05-12T23:59:14.917 に答える
0
if (is_array($bookmark) && !empty($bookmark)) { 
  foreach ($bookmark as $item) {               
   ...
  }
} else {
  echo "Your bookmark list is empty.";
}
于 2014-08-29T11:52:17.823 に答える