【问题标题】:Multi column dynamic PHP list多列动态PHP列表
【发布时间】:2011-10-18 05:51:53
【问题描述】:

所以我要做的是从我的数据库中选择所有不同的月份,然后将它们打印在一个列表中。那个,我能做到。问题在于我需要我的列表是两列。我用 CSS 实现这一点的方法是使用 2 个不同的 div 的“左”和“右”,它们彼此相邻浮动。这给 PHP 带来了一个问题,因为它需要在回显第六个月后回显一个 div 关闭和一个新 div 打开。然后它需要从停止的地方重新开始并完成。我不能只列出 HTML 中的所有月份,因为如果我在数据库中没有该月的任何记录,我不希望它列出一个月。有任何想法吗?我希望我已经足够清楚了!

谢谢!

-威廉

【问题讨论】:

  • 您需要以某种方式对单独的列表进行排序或格式化吗?
  • 嗯,内容/呈现分离的人群让我们所有人都在使用不合适的 div。这是表格数据,因此请使用表格。
  • 从他提出的问题来看,我认为他在创建两列表时会遇到同样的困难。
  • 如果您发布现有代码,其他成员将更容易对其进行调整。查看我的答案,如果不是您想要实现的,请至少提供您想要获得的示例输出。

标签: php mysql html css


【解决方案1】:

这样的事情应该可以工作(基本的想法是在你循环遍历它们时保持对月份的计数并增加它):

<div class="left">

<?php
$x = 1;
foreach($months as $month) {

   # switch to the right div on the 7th month
   if ($x == 7) {
      echo '</div><div class="right">';
   }

   echo "<div class=\"row\">{$month}</div>";

   # increment x for each row
   $x++;

}

</div>

【讨论】:

    【解决方案2】:
    <?php
    $numberOfMonths = count($months);
    $halfwayPoint = ceil($numberOfMonths / 2);
    
    echo "<div class=\"left\">";
    for($i=0; $i<$halfwayPoint; $i++){
            echo $months[$i] . "<br />";
    }
    echo "</div><div class=\"right\">";
    
    for($i=$halfwayPoint; $i<$numberOfMonths; $i++){
            echo $months[$i] . "<br />";
    }
    echo "</div>";
    ?>
    

    【讨论】:

      【解决方案3】:

      咆哮:开

      显示表格数据时,使用table 而不是浮动div。在禁用 css 的情况下查看页面时这将是有意义的。如果您使用浮动div,那么您的数据将一直向下显示。并非所有table 的使用都不好。人们经常非常讨厌table,所以使用浮动divTable 仅在用于页面布局时不好。

      咆哮:关闭

      当我需要用一些打开、关闭和中间的额外字符显示某些内容时,我会使用implode。这是一个例子:

      $data = array('column 1', 'column 2');
      $output = '<div>'.implode('</div><div>', $data).'</div>';
      //result: <div>column 1</div><div>column 2</div>
      

      您可以将其扩展到几乎任何东西。 Arrayimplode 是 php 多年来的强大功能。您永远不需要任何 if 来检查它是否是最后一个元素,然后插入结束字符,或者检查它是否是第一个元素,然后插入开始字符,或者在元素之间打印附加字符。

      希望对您有所帮助。

      更新:

      我误读了所问的主要问题。对不起,咆哮;) 这是我在 2 列中显示数据的代码:

      //for example, I use array. This should be a result from database
      $data = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
      //should be 12 month, but this case there are only 9 of it
      
      for ( $i = 0; $i <= 5; $i++)
      {
        //here I do a half loop, since there a fixed number of data and the item for first column
        $output = '<div class="left">'.$data[$i].'</div>';
        if ( isset($data[$i+6] )
        {
          $output = '<div class="right">'.$data[$i+6].'</div>';
        }
        echo $output."\n";
      }
      //the result should be
      //<div class="left">1</div><div class="right">7</div>
      //<div class="left">2</div><div class="right">8</div>
      //<div class="left">3</div><div class="right">9</div>
      //<div class="left">4</div>
      //<div class="left">5</div>
      //<div class="left">6</div>
      

      其他解决方案是使用 CSS 来格式化输出,因此您只需将 div 从上到下放置,然后 css 使父容器仅垂直放置 6 项,并将其余部分放在现有内容的右侧。我不太了解它,因为它通常由 css 设计师或我的客户提供。

      【讨论】:

      • 咆哮:这不是真正的表格数据。第 1 行第 1 列的值与第 1 行第 2 列的值无关。表格数据在西班牙语中为月/天数或月/月。会是什么?身体呢?有没有细胞?他将列用于设计/布局目的,因此表格不合适。咆哮:关闭
      • 好的,谢谢指出。我误读了这个问题,对不起。我已经更新了上面的答案。
      【解决方案4】:

      示例假设您有一个对象数组。

      <div style="width:150px; float:left;">
      <ul>
      <?php
      
      $c = count($categories);
      
      $s = ($c / 3); // change 3 to the number of columns you want to have.
      
      $i=1;
      foreach($categories as $category)
      {
          echo '<li>' . $category->CategoryLabel . '</a></li>';
          if($i != 0 && $i % $s == 0)
          {
              ?>
              </ul>
              </div>
              <div style="width:150px; float:left;">
              <ul>
              <?php
          }
          $i++;
      }
      
      ?>
      </ul>
      </div>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-10
        • 2012-03-19
        • 1970-01-01
        • 2019-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多