Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php (为什么)我应该在for循环之前测试数组是否为空?_Php_If Statement_For Loop - Fatal编程技术网

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
}