(为什么)我应该在 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
}
给定一个空数组$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
}