如何在删除所有已筛选对象时中断foreach循环


How to break out of a foreach-loop when all filtered objects have been deleted?

我使用下面的foreach循环在html表中显示一些产品及其属性,它可以毫无问题地工作:

<?php
$obj=new Crud;
$obj->read();
?>
<div class="product_table">
<table class="center">
  <tr>
    <td>ID</td>
    <td>Category</td>
    <td>Name</td>
    <td>Description</td>
    <td>Price</td>
    <td>Image</td>
    <td>action</td>
  </tr>
<?php
foreach($obj->data as $val){
    extract($val);
    ?>
    <tr>
    <td scope="row"><?php echo $id; ?></td>
    <td><?php echo $category_id; ?></td>
    <td><?php echo $name; ?></td>
    <td><?php echo $description; ?></td>
    <td><?php echo $price; ?></td>
    <td><?php echo $image; ?></td>
     <td><a href="edit.php?id=<?php echo $id; ?>">Edit</a>  |  <a href="delete.php?id=<?php echo $id; ?>">Delete</a></td>
  </tr>
    <?php
    }
?>
</table>
</div>
</div>

然而,当我删除所有产品时,foreach循环将显示以下错误消息,因为从逻辑上讲,已经没有产品了:

Notice: Undefined property: Crud::$data in ...
Warning: Invalid argument supplied for foreach() ...

我已经试过检查Crud::$data$val是否为空,如下所示:

if (empty(Crud::$data) {
   break;
   echo "No products listed.";
   }

但是,要么不再列出任何产品(尽管存在),要么错误消息仍然存在。

当没有剩余项目时,如何突破foreach循环?

取决于$obj->data是否不是数组或不存在:

如果不是数组,则不要运行循环:

if(is_array($obj->data)) {
    foreach($obj->data as $val){

如果没有设置或没有数组,请不要运行循环:

if(isset($obj->data) && is_array($obj->data)) {
    foreach($obj->data as $val){