2009-08-29 56 views
1

我知道如何做到这一点......我将给出以下示例代码。但我不能动摇这样的感觉,即有一种聪明的方式来完成我想要做的事情,而不使用像$isfirstloop这样的变量。如何仅在循环的第一次迭代时执行其他操作?

$isfirstloop = true; 
foreach($arrayname as $value) { 
if ($isfirstloop) { 
    dosomethingspecial(); 
    $isfirstloop = false; 
} 
dosomething(); 
} 

有什么办法只在第一个循环执行dosomethingspecial(),而在每次循环都执行dosomething(),而不会引入像$isfirstloop变量?

谢谢!

回答

4
foreach ($arr as $i => $val) 
{ 
    if ($i == 0) { doSomethingSpecial(); } // Only happens once. 
    doSomething(); // Happens every time. 
} 
+0

+1准确地说,我会评价它,当然,如果它是一个联合数组,这不会起作用,因为你会得到键而不是索引。 – 2009-08-29 20:10:58

+1

你必须假定数组的编号是第一个键是零。考虑一个具有未设置0元素的数组。 – 2009-08-29 20:12:46

+0

正是我在找的东西。这似乎很简单,但我从来没有想出它。非常感谢! – stalepretzel 2009-08-29 20:57:24

0
$count = count($arr); 

for ($i = 0; $i < $count; $i++) { 
    if ($i == 0) { dosomethingspecial(); } 
    doSomething(); 
} 
+0

非常适合具有非连续编号的关联数组或数组。 – 2009-08-29 20:20:26

7

原谅我,如果我失去了一些东西,但为什么不只是做的事情,你的循环之前想?

dosomethingspecial(); 
foreach($arrayname as $value) { 
dosomething(); 
} 
+1

如果您需要doSomethingSpecial()的第一个元素,您可以使用例如重置($ arrayname)(如果数组可能在循环之前重置) – VolkerK 2009-08-29 20:17:04

+3

dosomethingspecial()将始终被调用,无论$ arrayname数组是否填充了元素或不是,我会假设他至少希望调用它如果它至少有一个元素。 – 2009-08-29 20:19:44

+0

是的,如果你考虑到VolkerK的评论。 – 2009-08-29 20:21:35

1

嗯...你可以reset的数组,然后看看你的第一个关键:

reset($a); foreach($a as $k => $v) { 
    if(key($a)==$k) doIt(); 
} 
0
$elem = reset($arrayname); 
dosomethingspecial(); 
while(($elem = next($arrayname)) !== FALSE) { 
    dosomething(); 
} 
0

你没有获得来自替代方法的任何性能。你的方法很好。

相关问题