2013-05-31 58 views
1

我从一个excel电子表格中获取数据,并将其保存到数组中。然后,我将这些数据循环两次。如何在PHP中实现scoped foreach?

我做的:

foreach($someData as $key => $value) { 

} 

,我需要再次的foreach相同的阵列。有没有什么办法可以做到这一点,所以我可以再次使用$ key => $ value而不会造成任何问题?

+0

为什么不循环一次? –

+0

当你说“循环数据两次”时,第一个循环是在你开始第二个循环之前完成的吗? – Revent

回答

4

这听起来像你只需要一个循环,但回答你的问题,你可以这样做:

foreach($someData as $key => $value) { 
    #do stuff here 
} 

foreach($someData as $key => $value) { 
    #do more stuff here 
} 

$key$value每个循环的每次迭代期间将被覆盖,因此在这里没有危险。

你的问题有点不清楚,不过,如果你有一个foreach另一foreach的内部并希望使用相同的一组变量名的每个回路的键和值,使用功能。这是在PHP中创建新的本地范围的唯一方法:

function nested_loop($arr) { 
    foreach($arr as $key => $value) { 
     #do more stuff here 
    } 
} 

foreach($someData as $key => $value) { #same names, different variables 
    #do stuff here 

    nested_loop($value); 
} 
+0

谢谢。我以为他们被覆盖,但我不知道它是无害的。 – sk099

+0

好吧,正确使用它是无害的,但总是有潜力让程序员对特定变量包含的内容感到困惑,并犯一个错误(比我想象的更多)。所以这可能是一个好主意*不要*为两组变量使用相同的名称......通常像'$ key1'和'$ key2'是更好的主意。当它有道理时,我喜欢首先防止自己犯错误。 – sgroves

0

如果你的意思是两个foreach在同一个数组中相互嵌套,为什么不在你进入循环之前创建同一个数组的副本。 如果你的意思是在同一个数组上的两个独立的foreach循环,应该没有问题。