Php (为什么)我应该在for循环之前测试数组是否为空?
给定一个空数组Php (为什么)我应该在for循环之前测试数组是否为空?,php,if-statement,for-loop,Php,If Statement,For Loop,给定一个空数组$items=array() 为什么要使用以下代码(我以前见过): 而不仅仅是 foreach ($items as $item) // do stuff here 如果count($items)==0,则无论如何循环都不会执行???您通常不需要进行检查。我看到很多代码都有这样的检查,但这通常是不必要的,我认为这通常是由于程序员的无知。我经常看到的类似模式是在数据库查询之后: if (mysqli_num_rows($stmt) > 0) { while ($row
$items=array()代码>
为什么要使用以下代码(我以前见过):
而不仅仅是
foreach ($items as $item) // do stuff here
如果count($items)==0,则无论如何循环都不会执行???您通常不需要进行检查。我看到很多代码都有这样的检查,但这通常是不必要的,我认为这通常是由于程序员的无知。我经常看到的类似模式是在数据库查询之后:
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>";
}
if(计数($items)>0){
回声“;
foreach($items作为$item){
//显示表行
}
回声“;
}否则{
回显“未找到数据!”;
}
这实际上取决于你想做什么。正如评论所指出的,您可能希望空数组是一种特殊情况,因此希望以不同的方式处理这种情况。否则,如果在空数组上执行foreach
,将不会抛出任何警告
,您将不会得到任何结果。您应该执行的一个典型检查是,如果$items
是一个数组,或者将$items
强制转换为一个数组,以避免得到警告。如果这样做,$items
通常会转换为一个值的数组,即$items
在该点上的值
e、 g
或
我认为,foreach
在评估不存在的东西时会抛出一个通知或警告级别的错误,因此,这确实适用于喜欢保持完全干净的错误日志的程序员。您不应该只在不确定是否有数组时才这样做吗?并且foreach将在空白数组上执行,并且只要$items是数组,就会发出通知,除非您还想在其他计算机上执行某些操作,例如显示“无记录”消息或类似操作,否则您不需要执行该计数。。。。如果$items不是数组或可跟踪对象,那么您可能需要首先检查其数据类型。。。。但是针对空数组的foreach不会给出任何通知或警告message@MarkBaker谢谢你的评论,这将是一个同样好的答案:)谢谢你还提到了“未找到数据”的最终用例,这很明显,但我在发布问题时没有想到它!如果$items
应该是一个数组而不是,那么很可能是一个bug。演员阵容会隐藏bug,这通常是个坏主意。但这取决于要完成什么,这就是为什么第二个选项更有趣的原因。
if (count($items) > 0) {
echo "<table>";
foreach ($items as $item) {
// display table row
}
echo "</table>";
} else {
echo "<b>No data found!</b>";
}
$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
}