【问题标题】:How to get down 'foreach' to display 3 results from each category in PHP?如何下'foreach'以在PHP中显示每个类别的3个结果?
【发布时间】:2012-03-18 16:21:03
【问题描述】:

我有我正在为开源做的电子商务模板的代码。 . .

你能看看这个吗!商店正在连续显示 3 个,并且有 n 个!即..,所有的行都被显示出来了。

我有一段从 Db 获取数据并显示商店信息的代码。 ..

我只想将 foreach 限制为 3 个结果。 . .而且我还需要一个更多按钮来将其发送给其他商店,例如底部的“更多>>”

  <?php 
  if(count($this->store_list)>0){
            foreach($this->store_list as $store){
            ?>
   <div id="menu">         
  <span class="cons_title fl"><a href="<?php echo PATH.'store/'.$store->title_url.'.html'; ?>"><h2><?php echo ucfirst($store->name); ?></h2></a></span>

             <div class="cons_bot fl clr">

                  <ul>
                    <li><h4><?php echo $store->address1; ?>,</h4></li>
                    <li><h4><?php echo $store->address2; ?>,</h4></li>
                    <li><h4><?php echo $store->area_name; ?>,</h4></li>
                    <li><h4><?php echo ucfirst($store->city_name); ?>,</h4></li>
                    <li><h4><?php echo $store->pin; ?></h4></li>
                    <li><h4>PH:</h4><h4><?php echo $store->phone; ?></h4></li>
                  </ul>
                  </div>   <?php
   }
       ?>

【问题讨论】:

  • 只需实现一个计数变量,每次通过循环递增它,如果达到 3 则中断。

标签: php html for-loop


【解决方案1】:
foreach (array_slice ($this->store_list, 0, 3) as $store)

【讨论】:

    【解决方案2】:

    添加这个:$countvar=array();

    然后,每次都这样做:

    if(empty($countvar[$store->category]))$countvar[$store->category]=1;
    else{if($countvar[$store->category]<3){$countvar[$store->category]++; [DISPLAY THE THINGS]}}
    

    这适用于您在一个地方列出所有商店的情况。如果您针对类别进行此操作,则其他解决方案也很有效。

    【讨论】:

      【解决方案3】:

      让 for each 循环在 3 次尝试后中断..

      <?php  
        if(count($this->store_list)>0){ 
        $ctr =1;
              foreach($this->store_list as $store){ 
                if($ctr == 3) break;
              ?> 
         <div id="menu">          
        <span class="cons_title fl"><a href="<?php echo PATH.'store/'.$store->title_url.'.html'; ?>"><h2><?php echo ucfirst($store->name); ?></h2></a></span> 
      
               <div class="cons_bot fl clr"> 
      
                    <ul> 
                      <li><h4><?php echo $store->address1; ?>,</h4></li> 
                      <li><h4><?php echo $store->address2; ?>,</h4></li> 
                      <li><h4><?php echo $store->area_name; ?>,</h4></li> 
                      <li><h4><?php echo ucfirst($store->city_name); ?>,</h4></li> 
                      <li><h4><?php echo $store->pin; ?></h4></li> 
                      <li><h4>PH:</h4><h4><?php echo $store->phone; ?></h4></li> 
                    </ul> 
                    </div>   <?php 
        $ctr++; } 
         ?> 
      

      【讨论】:

      • 而且我还需要一个更多按钮,以便将其与底部的“更多>>”等其他商店联系起来
      【解决方案4】:

      您应该在数据库查询中添加一个 LIMIT 子句:

      SELECT address1, address2, area_name, city_name, pin, phone from TABLE where 1 = 1 LIMIT 3;
      

      这只会检索 3 条记录,因此您可以保持 PHP 不变。

      【讨论】:

      • 虽然这样可行,但我认为为了可读性和以后能够修改它,使用计数器变量更有意义..
      • 我完全不同意,您使用计数器变量增加了不必要的开销,并且无缘无故地使您的代码膨胀。更不用说拉数百行只使用 3 是愚蠢的。只拉出你需要的行!
      • 这假设数据库查询所提取的唯一内容是每存储一行的结果集。鉴于在 OP 中迭代的内容是 $this-&gt;store_list,实际上可能并非如此。
      • 我完全同意@Developer。唯一需要注意的是主题启动器想要一个 More 按钮来显示更多记录。它可以通过实现 Ajax 请求(可以认为是多余的)或将限制扩展到 3 + n 行来解决,其中 n 是通过 JavaScript 显示的所需额外行数。
      【解决方案5】:

      改变这个...

      foreach($this->store_list as $store){
                  ?>
      

      到这个...

      $number_output = 0;
      foreach($this->store_list as $store){
          $number_output++;
          if($number_output > 3) break;
                  ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-16
        相关资源
        最近更新 更多