2011-08-31 105 views
0
foreach($tests as $i => $test){ 

    if ($test->getNumber() == 2) { 
     echo $i . $getName() ; 
    } else { 
    $i--; 
    } 

} 

例如:迭代中的foreach

number | name 
    1 | aaa 
    2 | bbb 
    1 | ccc 
    2 | vvv 
    2 | ccc 

告訴我:的

$i $name 
    2 bbb 
    4 vvv 
    5 ccc 

代替:

$i $name 
    1 bbb 
    2 vvv 
    3 ccc 

我怎樣才能解決這個問題?

+3

我不確定你的循環試圖做什麼...... –

+0

你想做什麼?你可以添加$測試數組? – Awea

+0

遞減$ i有什麼用? –

回答

2

怎麼一回事,因爲的foreach將返回你$測試的索引中的$測試陣列使您的$測試數組是:

$tests[0] => 1 aaa 
$tests[1] => 2 bbb 
$tests[2] => 1 ccc 
$tests[3] => 2 vvv 
$tests[4] => 2 ccc 

$我這是改寫由foreach語句每個iteartion。

試試這個(使用另一個櫃檯):

$j = 0; 
foreach($tests as $i => $test){ 
    if ($test->getNumber() == 2) { 
     $j++; 
     echo $j . $getName() ; 
    } 
} 
1

$i--沒有意義,因爲它在循環中被覆蓋。

$counter = 0; 
foreach($tests as $i => $test){ 
    if ($test->getNumber() == 2) { 
     ++$counter; 
     echo $counter . $getName() ; 
    } 
} 
3

我認爲你正在嘗試做的:

$i = 0; 
foreach($tests as $key => $test){ 
    if ($test->getNumber() == 2) { 
    echo ++$i . $getName() ; 
    } 
} 
+0

你不需要'$ key' ... –

0

的問題是,你是從陣列式打印的數量,而不是創建新的編號。

未經測試,但應該工作。

foreach($tests as $i => $test){ 
    $num = '0'; 
    if ($test->getNumber() == 2) { 
     echo $num . $getName() ; 
     $num++; 
    } else { 
    $i--; 
    } 

} 
+0

J0HN實際上是正確的。不需要你的其他陳述。 – gamesmad

+0

$ num ='0'循環內。 – CaNNaDaRk

+2

是的。我在工作時會停止這樣做。哈哈。 – gamesmad