【问题标题】:PHP Foreach Skip Results from ArrayPHP Foreach 跳过数组中的结果
【发布时间】:2016-01-20 12:03:36
【问题描述】:

我正在尝试限制我的 foreach 中显示的结果数量,到目前为止我已经得到了这个:

    <?php $facilitiescounter = 0; ?>
    <?php foreach ($facilities as $data) { 
    if (++$facilitiescounter == 7) break; 
    echo '<div class="checkmark-33"><div class="fa-stack fa-1x checkmark-icon"><i class="fa fa-circle fa-stack-2x icon-background"></i><i class="fa fa-check fa-stack-1x icon-text"></i></div><div class="checkmark-inner">'. $data->Name .'</div></div>'; }?> 

    <a class="read-more-show hide" href="#">Show More</a> <span class="read-more-content">Show all other results from array <a class="read-more-hide hide" href="#">Show Less</a></span>

我已设法将其限制为前 6 个结果,是否可以再进行一次 foreach 以获得除前六个之外的所有其他结果?

或者有更好的方法吗? 谢谢!

【问题讨论】:

  • 一个简单的for循环怎么样?
  • 也许尝试使用for

标签: php arrays loops foreach


【解决方案1】:

一个简单的for循环在这种情况下更合适,因为我们可以很容易地确定开始和结束

到前六个结果:

for($i = 0, $t = min(6, count($facilities)); $i < $t; ++$i)
{
    $facilities[$i]->Name
    ....

其他的:

for($i = 6, $t = count($facilities); $i < $t; ++$i)
{
    $facilities[$i]->Name
    ....

注意:如果$facilities 的元素少于 6 个,则添加了最小验证。感谢@lanis

【讨论】:

  • 这个答案很棒......除了 $facilities 的项目少于 6 个......所以我会在 for continue 条件下使用 min(6, count($facilities) :for($i = 0; $i &lt; min(6, count($facilities)); ++$i)跨度>
【解决方案2】:

你可以使用 array_slice() http://php.net/manual/fr/function.array-slice.php

$datas = array_slice($facilities, 0, 6); // First 6 items

foreach($datas as $data) {
    echo '<div class="checkmark-33"><div class="fa-stack fa-1x checkmark-icon"><i class="fa fa-circle fa-stack-2x icon-background"></i><i class="fa fa-check fa-stack-1x icon-text"></i></div><div class="checkmark-inner">'. $data->Name .'</div></div>'; 
}

$datas = array_slice($facilities, 6); // Items after 6

foreach($datas as $data) {
    echo '<div class="checkmark-33"><div class="fa-stack fa-1x checkmark-icon"><i class="fa fa-circle fa-stack-2x icon-background"></i><i class="fa fa-check fa-stack-1x icon-text"></i></div><div class="checkmark-inner">'. $data->Name .'</div></div>'; 
}

【讨论】:

    【解决方案3】:

    是的,您可以以更好的方式做到这一点。只需将您的 $facilities 数组放入一个名为 $temp 的临时数组中,然后每当执行 foreach 循环时,只需从 $temp 数组中删除该元素即可。之后,您只需将 $facilities 数组替换为 $temp。

    【讨论】:

      【解决方案4】:
      <?php $facilitiescounter = 0; ?>
      <?php foreach ($facilities as $data) { 
      if (++$facilitiescounter <= 7) break; 
      echo '<div class="checkmark-33"><div class="fa-stack fa-1x checkmark-icon"><i class="fa fa-circle fa-stack-2x icon-background"></i><i class="fa fa-check fa-stack-1x icon-text"></i></div><div class="checkmark-inner">'. $data->Name .'</div></div>'; }?> 
      
      <a class="read-more-show hide" href="#">Show More</a> <span class="read-more-content">Show all other results from array <a class="read-more-hide hide" href="#">Show Less</a></span>
      

      我只更改了 if 条件。它会给你正确的结果。试试看!

      【讨论】:

        猜你喜欢
        • 2013-03-30
        • 1970-01-01
        • 1970-01-01
        • 2014-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-21
        相关资源
        最近更新 更多