(为什么)我应该在for循环之前测试数组是否为空?

时间:2015-04-25 11:46:20

标签: php if-statement for-loop

给定一个空数组$items = array();

为什么我要使用以下代码(我以前见过):

if (count($items) > 0) {
   foreach ($items as $item) // do stuff here
}

而不仅仅是

foreach ($items as $item) // do stuff here

如果count($items) === 0循环不会执行?

2 个答案:

答案 0 :(得分:1)

您通常不需要进行检查。我看到很多带有该检查的代码,但它通常是不必要的,我认为这通常是由于程序员的无知。我经常看到的类似模式是在数据库查询之后:

if (mysqli_num_rows($stmt) > 0) {
    while ($row = mysqli_fetch_assoc($stmt)) {
        ...
    }
}

这个测试也是不必要的;如果没有找到行,则第一次提取将返回false,循环将停止。

唯一有用的情况是,如果您想告诉用户没有结果,而不是只显示一个空表。所以你可以这样做:

if (count($items) > 0) {
    echo "<table>";
    foreach ($items as $item) {
        // display table row
    }
    echo "</table>";
} else {
    echo "<b>No data found!</b>";
}

答案 1 :(得分:1)

这实际上取决于你想做什么。正如评论所指出的那样,您可能希望将一个空数组作为特殊情况,因此您希望以不同方式处理该情况。否则,如果在空数组上执行warning,则不会抛出foreach,您将无法获得任何结果。您应该执行的典型检查是,$items是一个数组,或者将$items转换为数组,以避免获得warning。如果你这样做,$items通常会转换为一个值的数组,即该值$items

e.g。

$items = 2;
foreach((array)$items as $item) {
    print $item; //will print 2 alright
  }

if(is_array($items)) {
    foreach($items as $item) {
      print $item;
    }
}
else {
    // do something here
}