2017-03-08 76 views
3

启动一个foreach循环时,是否将其转换为数组被认为是不好的做法。是这样的:是否将数组转换为foreach被认为是不好的做法?

foreach ((array) $examples as $example) { 
    // Do stuff 
} 

这防止()

发生提供的foreach

参数无效。

或者会是一个更好的做法,以检查其阵列第一:

if (is_array($examples)) { 
    // Do the loop 
} 
+2

可迭代对象,例如Collection或Generator,可以使用'foreach()'循环,但会返回'false'对于'is_array()'....更好地通过其他方式检查 –

+0

是否有任何我们应该了解的情况?如果不是数组,您是否期望任何类型的任意类型,包括“Traversable”接口的实现?或者你只是想检测数据集是否为空?这是否是不好的做法在很大程度上取决于这一点。一般来说,对于你的内部变量可以容纳的内容没有最明确的想法可能是一个设计问题的症状,应该可能在别的地方解决。 –

回答

0

有时候,你不能一个变量转换为数组。所以你最好检查它是否可迭代。您可以使用此代码来检查变量是否可遍历或可用于foreach:

if(!is_array($examples) && !$examples instanceof Traversable) 
+0

我不知道doewvote的原因,你会展示它。 –

+1

似乎对我来说很好。在这种情况下,变量将无法转换为数组?如果我100%确定这个变量是一个数组还是一个字符串呢?当检查是否有'Traversable'的实例时,'is_array'也是必需的 –

相关问题