我想在try / catch中包围整个代码块,因为当网格数组中没有任何内容时它会导致错误。这是最好的方法吗?
<?php foreach ($grid->result() as $idx => $row): ?> <?php if ($idx % 3 == 2): ?>
<div class="img_grid_3"><img src="/images/thumb/<?= $row->images_name; ?>" /></div>
<?php else: ?>
<div class="img_grid"><img src="/images/thumb/<?= $row->images_name; ?>" /></div>
<?php endif; ?>
<?php endforeach; ?>
由于
答案 0 :(得分:1)
也许我错过了这一点,但为什么不在做foreach之前测试$ grid?
<?php if($grid): ?>
.... foreach ....
<?php endif; ?>
答案 1 :(得分:0)
如果我找到了你,你正在寻找@
错误抑制算子。如果你将一个空数组传递给foreach,你会得到一个PHP警告,你不能用try/catch
块来捕获它。
<?php @foreach ($grid->result() as $idx => $row): ?>
<?php if ($idx % 3 == 2): ?>
<div class="img_grid_3"><img src="/images/thumb/<?= $row->images_name; ?>" /></div>
<?php else: ?>
<div class="img_grid"><img src="/images/thumb/<?= $row->images_name; ?>" /></div>
<?php endif; ?>
<?php endforeach; ?>
也可以使用带有html内容的try catch块,但显然只能捕获Exceptions
。
请注意,在foreach
块中使用数组之前检查数组是否为空是更清晰的。
答案 2 :(得分:0)
foreach
将不会产生错误。
因此,$grid
不是对象,或者result()
返回的是非false
或null
等数组。如果前者围绕后者的foreach
if ($grid)
,则使用if (!empty($grid->result()))