5

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

我的代码是

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

6 回答 6

14
$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>';
}
}
于 2012-05-05T19:42:43.010 回答
14

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

前任:

 $b = false;
 foreach( ...) {
    if(!$b) {       //edited for accuracy
       $b = true;
       continue;
    }
 }
于 2012-05-05T19:44:44.333 回答
3

尝试这样的事情

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>';
    }
}
于 2012-05-05T19:44:22.830 回答
1
$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;
}
于 2012-05-05T19:43:36.243 回答
0

如果您不想定义额外的计数器:

    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>';
    }
}

我不知道哪个会更好。

于 2020-08-11T19:16:02.633 回答
0

你也可以在 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>';
   }
}
于 2022-01-23T06:15:25.873 回答