如何在foreach中找到最后一个元素?

时间:2018-02-11 17:55:48

标签: php

我正在尝试使用SimpleHtmlDom library

  foreach($html->find('div[class="blogcontent]') as $a) {
    foreach($a->find('p') as $elm) {
      echo $elm->href .$elm->plaintext. '<p>';
      if($elm, -1) {
       return;
      }
    }
  }

我正在尝试实施他们的医生所说的话:

> // Find lastest anchor, returns element object or null if not found
> (zero based) $ret = $html->find('a', -1); 

但我明白了:

  

解析错误:语法错误,意外&#39;,&#39;

我需要停止循环并且不要回显它找到的最后一个p

3 个答案:

答案 0 :(得分:1)

备选方案1:

您可以尝试以“旧方式”获取最后一个元素,即使用 count()来获取元素数量,然后使用计数器比较(如果它在中)最后一个元素然后如果它是真的你跳过最后一个元素。这样你就可以做到:

$a=$html->find('div[class="blogcontent]';
$i = 0;

foreach($a as $as) {
    $b=$as->find('p');
    $total_items = count($b);
    foreach($b as $elm) {
       if ($i == $total_items - 1) {
          return; // or you can use break function to see if it stops on the last element
       }
       echo $elm->href .$elm->plaintext. '<p>';

    }
  }

备选方案2:

您可以使用结束()来了解您是否使用此方式处于最后一个元素:

$a=$html->find('div[class="blogcontent]';

foreach($a as $as) {
    $b=$as->find('p');

    foreach($b as $elm) {
       if ($elm === end($b)) {
          return; // or you can use break function to see if it stops on the last element
       }
       echo $elm->href .$elm->plaintext. '<p>';

    }
  }

答案 1 :(得分:1)

如果您要删除最后一个标记,而不是遍历所有数据,请从find()获取所有值,然后使用array_pop()删除最后一个...

  foreach($html->find('div[class="blogcontent"]') as $a) {
    $pTags = array_pop($a->find('p'));
    foreach( $pTags as $elm) {
      echo $elm->href .$elm->plaintext. '<p>';
    }
  }

如果您只想要最后一个<p>标记,那么

$pTags = $a->find('p');
$lastTag = $pTags[count($pTags)-1];

答案 2 :(得分:1)

除了尝试识别最后一个条目之外,在每个条目之前显示nameLabel1 = Label(welcome, text="Welcome", bg="gray", fg="white") nameLabel1.grid(column=0, row = 1) nameLabel2 = Label(welcome, text="Welcome", bg="gray", fg="white") nameLable2.grid(column=1, row = 1) nameLabel3 = Label(welcome, text="Welcome", bg="gray", fg="white") nameLabel3.grid(column=2, row = 1) 可能更容易,除了第一个条目

<p>