作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
例子:
foreach($boxes as $box) {
echo "$box \n";
}
过去相当简单,我可以将 foreach 包裹在支票周围,例如:
if(is_array($boxes) && count($boxes) > 0) {
//foreach loop here
}
如果由于某种原因将错误的输入传递给 $boxes 数组,则不必担心会抛出警告。
当迭代器被添加到组合中时,这不再有效,因为可迭代对象不是数组。所以,我有一些解决方案,但想知道是否有这方面的“最佳实践”。
// 1:
if($boxes instanceof Traversable && count($boxes) > 0) {
//foreach loop here
}
// 2:
if($boxes && count($boxes) > 0) {
//foreach loops here
}
还有其他的,但这些似乎是最明显的。任何人有任何建议。 PHP 文档似乎是沉默的。
最佳答案
您不应该有 count($array) > 0 部分
,因为 a) foreach 可以很好地处理空数组,b) 对象可以是 Traversable
还不是Countable
c) count()
返回的值甚至可能(对于对象)与遍历将产生的项目数断开连接。
而#1与#2有不同;因为 $boxes instanceOf Traversable
与 $boxes
不同。另请注意,内部数组不实现 Traversable。
我会去
if (is_array($boxes) || $boxes instanceof Traversable) {
foreach (...)
}
这仍然不能保证遍历成功;迭代可能会在任何时候抛出异常。特别是,对于某些类,多次遍历它们可能没有意义。
关于php - 验证元素是否已准备好在 php 的 foreach() 循环中使用的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3391020/
我是一名优秀的程序员,十分优秀!