2009-08-29 81 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

你沒有獲得來自替代方法的任何性能。你的方法很好。

相關問題