如何只从foreach获得一个结果(PHP)

时间:2011-10-07 15:45:16

标签: php

代码循环一个数组并显示用户的所有视图。现在事情发生了变化,我只需要显示foreach循环中的一个结果。我该怎么做?

<table class="report_edits_table">
<thead>
  <tr class="dates_row">
  <?php foreach($report['edits'] as $report_edit) : ?>
    <td colspan="2" report_edit_id="<?php echo $report_edit['id'] ?>"><div class="date_container">
    <?php if($sf_user->hasCredential(Attribute::COACHING_EDIT_ACCESS)) : ?>
      <span class="ui-icon ui-icon-trash">Remove</span>
    <?php endif?>
    <?php echo "View " . link_to($report_edit['created'], sprintf('coaching/viewReportEdit?reportedit=%s', $report_edit['id']), array('title' => 'View This Contact')) ?> </div></td>
  <?php endforeach ?>
  </tr>
</thead>
<tbody>
  <?php foreach($report['edits_titles'] as $index => $title) : ?>
  <tr class="coach_row">
    <?php for ($i=max(0, count($report['edits'])-2); $i<count($report['edits']); $i++) : $report_edit = $report['edits'][$i] ?>
    <td class="name_column"><?php echo $title ?></td>
    <td class="value_column"><?php echo $report_edit[$index] ?></td>
    <?php endfor ?>
  </tr>
  <?php endforeach ?>
</tbody>

7 个答案:

答案 0 :(得分:5)

使用break命令进行简单转换:

<?php for ... ?>
    ... stuff here ...
    <?php break; ?>
<?php endfor ... ?>

更好的解决方案是完全删除foreach

答案 1 :(得分:4)

听起来你想要从数组中获取第一个元素而不必遍历其余元素。

PHP为这种情况提供了一组函数。

要获取数组中的第一个元素,请先使用reset()函数将数组指针定位到数组的开头,然后使用current()函数读取指针的元素正在看。

所以你的代码看起来像这样:

<?php
reset($report['edits']);
$report_edit = current($report['edits']);
?>

现在,您可以使用$report_edits,而无需使用foreach()循环。

(请注意,数组指针实际上默认在第一条记录处启动,因此可以跳过reset()调用,但最好不要这样做,因为它可能有在您没有意识到的情况下,您的代码中的其他地方已被更改)

如果您想在此之后转到下一条记录,则可以使用next()功能。如您所见,如果您愿意,理论上可以使用这些函数来编写替代类型的foreach()循环。以这种方式使用它们没有任何意义,但这是可能的。但它们确实允许对阵列进行更精细的控制,这对于像你这样的情况很方便。

希望有所帮助。

答案 2 :(得分:3)

有很多方法

  1. 直接访问相关数组元素的索引
  2. 更新任何逻辑提取/生成数组以仅返回感兴趣的元素
  3. 使用在单个循环后终止的for循环
  4. array_filter你的数组以获得感兴趣的元素
  5. 在foreach循环结束时中断,以便在第一次迭代后终止
  6. 在foreach循环中有条理地检查索引,如果索引与感兴趣的元素匹配,则仅输出标记
  7. 等等
  8. 我建议只获取感兴趣的数组元素(列表中的数字2),因为它意味着更少的数据在您的代码周围弹跳(如果您从SQL填充数组,可能在您的PHP框和数据库之间)服务器)

答案 3 :(得分:1)

最简单的方法?

break作为foreach的最后一行。它会执行一次,然后退出。 (只要你停下来的 元素并不重要)。

辅助方法:在$report['edits']$report['edits_titles']上使用array_poparray_shift来获取元素,丢失for循环,并引用刚刚检索到的元素。< / p>

例如:

//
// current
//
foreach ($report['edits'] as $report_edit) :
  /* markup */
endforeach;

//
// modified version
//
$report_edit = array_shift($report['edits']);
  /* markup */

答案 4 :(得分:1)

<?php break ?>

之前使用<?php endforeach ?>

答案 5 :(得分:1)

example :: 

<?php  
  foreach ($this->oFuelData AS $aFuelData ) {
    echo $aFuelData['vehicle'];
    break;                      
  }
?>

答案 6 :(得分:0)

您也可以将其用作参考

    foreach($array as $element) {
    if ($element === reset($array))
        echo $element;

    if ($element === end($array))
        echo $element;
    }