Foreach最后一项有条件

时间:2014-01-27 12:21:24

标签: php

foreach ($orderItems as $item) {
    if ($item->isNotCancelled()) {
        echo 'ITEM....<br />';
        // if last NOT CANCELLED item:
        echo '<strong>ITEM....</strong><br />';
    } else {
        // ignored completely
    }
}

我需要在最后一个未被取消的项目周围添加<strong> ...我知道如何检查数组或迭代器的最后一项,但是if情况下的条件你怎么做的?

我需要2个循环吗?


更新&amp;解决方案:我通过反转逻辑并找到第一个项目而不是最后一个项目来解决这个问题。

如果有人想发表评论或回答,我会继续提问。

3 个答案:

答案 0 :(得分:1)

试试这个:

$i=0;
$counter=0;
foreach ($orderItems as $item) {
    if ($item->isNotCancelled()) {
       $counter=$i;
   }
  $i++;
}
 $i=0;
  foreach ($orderItems as $item) {
    if ($item->isNotCancelled()) {
      if( $counter==$i){
      echo "<strong>".$item."</strong></br>"
     }
   }
  $i++;
}

这是怎么回事?

答案 1 :(得分:1)

$lastNonCancelledItem = null;
foreach ($orderItems as $item) {
    if ($item->isNotCancelled()) {
        echo 'ITEM....<br />';
        $lastNonCancelledItem = $item;
    } else {
        // ignored completely
    }
}

echo '<strong>' $lastNonCancelledItem; //profit

如果显示这些项目是一项复杂的任务,您不希望在2个地方重复,请制作某种功能来显示该项目

$lastNonCancelledItem = null;
foreach ($orderItems as $item) {
    if ($item->isNotCancelled()) {
        $view->showItem($item);
        $lastNonCancelledItem = $item;
    } else {
        // ignored completely
    }
}

echo $view->showItem($lastNonCancelledItem, TYPE_STRONG); //profit (or whatever)

答案 2 :(得分:0)

你能试试吗,

    $coun = count($orderItems);
    $i=1;
    foreach ($orderItems as $item) {
        if ($item->isNotCancelled()) {
            echo 'ITEM....<br />';
            // if last NOT CANCELLED item:

        }else {
          // ignored completely
       }
         if($i==($coun-1))
            echo '<strong>ITEM....</strong><br />';
        $i++;
    }