gpt4 book ai didi

php - 验证元素是否已准备好在 php 的 foreach() 循环中使用的最佳方法是什么?

转载 作者:可可西里 更新时间:2023-11-01 00:37:59 26 4
gpt4 key购买 nike

例子:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com