繁体   English   中英

foreach中的迭代[关闭]

[英]iteration in foreach [closed]

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

我该如何解决?

我认为您正在尝试这样做:

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

因为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语句重写每个迭代。

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

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

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

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

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

未经测试,但应该可以。

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

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM