2012-04-09 46 views
0

我有一個關於在PHP中的foreach功能的問題:PHP的foreach迭代而不是兩次一次

目前我有:

<html> 
<body> 

<?php 

$x=array("one","two","three", "four", "five", "six", "seven", "eight"); 

foreach ($x as $value) 
    { 
    echo $value . "<br />"; 
    } 
?> 

,輸出:

one 
two 
three 
four 
five 
six 
seven 
eight 

但我如何使foreach循環迭代兩次而不是一次我得到:

two 
four 
six 
eight 

這是可能的嗎?或者更好地使用for循環代替?

任何幫助將不勝感激,謝謝。

+0

會建議使用'for'並具有2,而不是'foreach'的增量。 – Tapos 2012-04-09 11:13:22

回答

4

你的意思是跨越其他所有條目嗎?你應該只使用一個循環:

for($i = 1; $i < count($x); $i += 2) 
{ 
    echo $x[$i] . '<br />'; 
} 
+0

我只是想要討厭,這將最終與一,三,五,七...... – ajreal 2012-04-09 11:31:59

+0

我編輯它,以更精確地符合OP的例子。 – 2012-04-09 22:50:49

1
$cnt = 0; 
foreach ($x as $value) 
{ 
    $cnt++; 
    if ($cnt % 2 == 1) continue; 
    echo $value . "<br />"; 
} 

我想用for只是假設陣列工作在順序索引以便使本作@GordonM

陣列如

array(2=>'one', 1=>'two', 4=>'three' ...) 

會拖累你到地獄

+1

你爲什麼要這樣做,而不是使用'for'循環?似乎對我真的很浪費。 – GordonM 2012-04-09 11:12:07

+0

浪費?完全沒有,請檢查更新後的答案 – ajreal 2012-04-09 11:39:44

+0

確實如此,但OP的示例基於統一索引的數組。對於處理亂序或關聯數組的情況,你可以只用'array_values'或'while {(each($ array))&&($ data = each($ array)){}'不問)。 – GordonM 2012-04-09 12:13:34

2

如果「重複兩次」你的意思是「跳過奇項「:

$odd = FALSE; 
foreach ($x as $value) 
{ 
    $odd = !$odd; 
    if($odd){ 
     continue; 
    } 

    echo $value . "<br />"; 
} 

(如果您選擇使用您需要自己算的foreach。)

+1

你爲什麼要這樣做,而不是使用'for'循環?似乎對我真的很浪費。 – GordonM 2012-04-09 11:11:49

+0

這只是一個工具,可以根據您的判斷使用它。 foreach不好執行基於位置的操作,並且對循環關聯數組不好。 – 2012-04-09 15:17:06

1

也許這就是你想要的。

$t=count($x); 
for($i=0;$i<$t;$i++){ 
    if($i%2==0 && $i>0){ 
     echo $x[$i]."<br>"; 
    } 
} 

問候!

3
<?php 
    $i=1; 

    $x=array("one","two","three", "four", "five", "six", "seven", "eight"); 

    foreach ($x as $value) { 
     $i++; 
     if($i%2==0){ 
      continue; 
     } 
     echo $value . "<br />"; 
    } 
    ?> 
+0

肯定這會在第一次輸出後卡住? '$ i'會變成2,那麼隨着'$ i ++'在繼續之後會不會增加? – Nick 2012-04-09 10:59:00

+0

尼克,謝謝你指出錯誤,我編輯了答案 – Pete 2012-04-09 11:07:04

0
<?php 

$x=array("one", "two", "three", "four", "five", "six", "seven", "eight"); 
$i=2; 
foreach ($x as $value) { 
    if(($i % 2)==0) { 
     echo $value . "<br />"; 
    } 
    $i++; 
    } 
?>