在foreach迭代

时间:2011-08-31 13:07:31

标签: php html foreach

foreach($tests as $i => $test){

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

}

例如:

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

我该如何解决?

4 个答案:

答案 0 :(得分:3)

我认为你正在尝试:

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

答案 1 :(得分:2)

因为foreach会在$ tests数组中返回$ test的索引,所以你的$ tests数组是:

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

$ i由foreach语句重写每个iteartion。

试试这个(使用另一个计数器):

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

答案 2 :(得分:1)

$i--中没有任何意义,因为它在循环中被覆盖。

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

答案 3 :(得分:0)

问题是您要从数组中打印数字,而不是创建新的编号。

未经测试但应该可以使用。

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

}