如何忽略第一个循环并从第二个循环继续


how to ignore first loop and continue from second in foreach?

我使用 foreach 循环,但它总是在第一个循环中给出一个奇怪的结果,但其他人都很好,所以我想删除第一个循环并从第二个循环继续......

我的代码是

foreach($doc->getElementsByTagName('a') as $a){
foreach($a->getElementsByTagName('img') as $img){
   echo $a->getAttribute('href');
   echo $img->src . '<br>';
}
}
$counter = 0;
foreach($doc->getElementsByTagName('a') as $a){
foreach($a->getElementsByTagName('img') as $img){
   if ($counter++ == 0) continue;
   echo $a->getAttribute('href');
   echo $img->src . '<br>';
}
}

为了跳过第一个循环,我能想到的最简单方法是使用标志

前任:

 $b = false;
 foreach( ...) {
    if(!$b) {       //edited for accuracy
       $b = true;
       continue;
    }
 }

尝试这样的事情

foreach($doc->getElementsByTagName('a') as $a)
{
    $count = 0;
    foreach($a->getElementsByTagName('img') as $img)
    {
        if(count == 0)
        {
            $count++;
            continue;
        }
        echo $a->getAttribute('href');
        echo $img->src . '<br>';
    }
}
$nm = 0;
foreach($doc->getElementsByTagName('a') as $a){
  if($nm == 1){
    foreach($a->getElementsByTagName('img') as $img){
       echo $a->getAttribute('href');
       echo $img->src . '<br>';
    }
  }
  $nm=1;
}
如果不想

定义额外的计数器:

    foreach($doc->getElementsByTagName('a') as $a){
    foreach($a->getElementsByTagName('img') as $img){
        if ( $a === reset( $doc->getElementsByTagName('a') ) && $img === reset( $a->getElementsByTagName('img') ) ) continue;
       echo $a->getAttribute('href');
       echo $img->src . '<br>';
    }
}

我不知道哪个会表现得更好。

你也可以在PHP中尝试数组切片:

foreach(array_slice($doc->getElementsByTagName('a'),1) as $a){
   foreach(array_slice($a->getElementsByTagName('img'),1) as $img){
      echo $a->getAttribute('href');
      echo $img->src . '<br>';
   }
}