我使用下面的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){