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

(Why) should I test if an array is empty prior to a 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循环无论如何都不会执行??

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

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

这个测试也是不必要的;如果未找到任何行,则第一次提取将 return false,循环将停止。

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

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

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

例如

$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
}