$array='hello hello2';
foreach(explode(' ',$array) as $v)
echo $v;
爆炸会执行多少次?
使用另一个var更好:
$exploded = explode(...);
foreach($exploded as $v)
...
答案 0 :(得分:8)
它只执行一次。 foreach
将对explode
(数组或假)的返回值的副本进行操作。
foreach
是一种期望$array as $key => $value
的语言结构。 $array
可以是任何求值为数组的表达式,explode
就是这样一个函数。表达式仅计算一次,然后foreach对表达式的结果进行操作。
例如,这与常规for
循环不同。 for
循环有三个表达式。对于循环的每次迭代,都会计算第二个和第三个表达式。
因此,对于for循环,可能在这两个语句之间存在差异(将优化和count
的O(1) - 性能除外):
for($i = 0; $i < count($array); ++$i) { … }
// vs.
for($i = 0, $c = count($array); $i < $c; ++$i) { … }
答案 1 :(得分:1)
explode
只会被调用一次,并将返回的数组提供给foreach
进行迭代。
如果只使用foreach
调用一次,您可能不想使用其他变量。
但是如果你的爆炸失败并且在任何情况下都返回false,foreach将产生一个警告,因此在另一个变量中可以让你更好地控制那些警告和错误处理。
答案 2 :(得分:1)
它只执行一次。 foreach
Docs将根据explode
Docs的返回值进行操作。
由于包含explode
的表达式将被评估一次(它不在循环内),explode
将只运行一次。
但由于返回值可以是array
或FALSE
而foreach
仅适用于Array
或Object
的类型,因此它赢了如果你只想执行FALSE
一次,那么在foreach
执行需要变量的explode
之前,必须首先检查结果:
$array='hello hello2';
if (FALSE === $exploded = explode(' ',$array))
{
throw new RuntimeException('Explode failed.');
}
foreach ($exploded as $v)
{
echo $v;
}
对于此示例,对于foreach
部分,$exploded
也仅评估一次。
请参阅:Traversable
。
答案 3 :(得分:0)
只有一次explode
会被执行,请随意使用第一个。
答案 4 :(得分:-4)
第二个将使您的代码更具可读性,并使您能够输出结果数组内容以用于调试目的。