2012-11-16 28 views
2

我有我想从我的数据库中获取的值列表。列表可能会很长,所以如果它有超过15个项目,我想分成两列,如果超过30,我想分成三列。我怎样才能把它分成3列。例如..三列分列表

01 | 12 | 23

02 | 13 | 24

03 | 14 | 25

04 | 15 | 26

05 | 16 | 27

06 | 17 | 28

07 | 18 | 29

08 | 19 | 30

09 | 20 | 31

10 | 21 |

11 | 22 |

现在我使用的表,它有巨大的,如果窝在每个循环

$result = mysql_query("SELECT namecount FROM table WHERE name='$myvar'"); 

     if (!$result) 
      echo 'MySQL Error: ' . mysql_error(); 
     else 
     { 
      while ($row = mysql_fetch_array($result)) 
      { 
       $namecount= $row['namecount']; 
       for($i=1;$i<=$namecount;$i++) 
       { 
        if($namecount>15) 
        { 
         if($i==1) 
          echo "\n<table><tr><td width=\"200px\">"; 

         if($namecount%2==0) 
         { 
          if($i==$namecount/2) 
           echo "</td>\n<td>"; 
         } 
         else 
         { 
          if($i==($sailiot+3)/2) 
           echo "</td>\n<td>"; 
         } 
        } 

       //Print content here 

       if($namecount>15) 
        { 
         if($namecount%2!=0 && $i==$namecount) 
          echo "<h3>&nbsp;</h3><p>&nbsp;<br>&nbsp;</p>"; //if last item and count is odd, print empty item 

         if($i==$namecount) 
          echo "\n</td></tr></table>\n";     
        } 
       } 
      } 
     } 

的开始这(有点)的作品有两列,但什么约三?

+0

该代码打印空表。你使用的是真实的代码吗? – StasGrin

+0

它只是一个单一列数据 –

+0

“//在这里打印内容”添加项目。它很长,并且提出了很少的问题,所以我将其删除。将其更改为回显“

$ i

”;或者是让东西打印的东西 – user1829015

回答

0

我会从内循环中提取<tr>, </tr>,这样可以节省额外的if s。对于拆分成多列,就可以计算出项目数列中,引入第二帧内列变量来跟踪:

while ($row = mysql_fetch_array($result)) { 
    $namecount = $row['namecount']; 

    // calculate items per column 
    $columns = 1; 
    if ($namecount > 15) 
     $columns = 2; 

    if ($namecount > 30) 
     $columns = 3; 

    $items = $namecount/$columns; 
    if ($namecount % $columns > 0) 
     ++$items; 

    echo "\n<table><tr><td width=\"200px\">"; 
    for ($i = 1, $j = 1; $i <= $namecount; $i++, $j++) { 
     if ($j > $items) { 
      echo "</td>\n<td>"; 
      $j = 1; // reset for new column 
     } 

     // Print content here 
    } 

    if ($namecount % 2 != 0) { 
     // if count is odd, print empty item 
     echo "<h3>&nbsp;</h3><p>&nbsp;<br>&nbsp;</p>"; 
    } 

    echo "\n</td></tr></table>\n"; 
} 
+0

谢谢。这不是我想要的,但足够接近。你知道如果有30个以上的项目,我可以将它平均分成三列,不管有多少? – user1829015

+0

你想要1,2或3列,从不更多? –

+0

是的,这是正确的 – user1829015

0

使用css3 multi column property

<style> 
.namecount { 
    -moz-column-count:3; /* Firefox */ 
    -webkit-column-count:3; /* Safari and Chrome */ 
    column-count:3; 
} 
</style> 

<div class="namecount"> 
Long Text 
</div> 
+0

这工作。谢谢你=) – user1829015

+0

...但这不适用于IE浏览器(肇事?不) – user1829015

+0

你是对的它不工作 – vlcekmi3

0

你也许可以试试这个

$result = mysql_query("SELECT namecount FROM table WHERE name='$myvar'"); 

    if (!$result) 
     echo 'MySQL Error: ' . mysql_error(); 
    else 
    { 
     while ($row = mysql_fetch_array($result)) 
     { 
     $namecount= $row['namecount']; 

     for($i=1;$i<=$namecount;$i++) 
      { 
       if($namecount<=15){ 
       echo "<table><thead><tr><th>".$your_variable_data."</th></tr></thead>";} 
    else if ($namecount >15 and $namecount <=30){ 
    echo "<thead><tr><th>".$your_variable_data."</th></tr></thead></table>"; 

     } 
      } 
     } 

它没有测试,但它应该为3列工作,如果你想更多只是添加其他如果。 这里演示怎么会 http://jsfiddle.net/TCJjj/107/

+0

对不起,我更新了链接到jsfiddle –

0

我发现,CSS3多列是浏览器之间可怕的不一致,和非常错误(元素与float:leftwhite-space:nowrap等导致它打破)。

因此,我写了下面的保留key =>值对的蛮力collactor。

// vars 

    $list = array('a','b','c','d','e','f','g','h','i','j','k','l','m', 
        'n','o','p','q','r','s','t','u','v','w','x','y','z'); 
    $columns = 3; 

// sort it 

    $count = count($list); 
    $base = ceil($count/$columns); 

    $keys = array_keys($list); 
    for ($i=0;$i<$columns;$i++) { 
     for ($j=0;$j<$base;$j++) { 
      if (!empty($keys)) { 
       $col[$i][] = array_shift($keys); 
      } 
     } 
    } 

    $sorted = array(); 
    for ($j=0;$j<$base;$j++) { 
     for ($i=0;$i<$columns;$i++) { 
      if (isset($col[$i][$j])) { 
       $sorted[$col[$i][$j]] = $list[$col[$i][$j]]; 
      } 
     } 
    } 

// check output 

    echo '<div style="float:left;margin-right:20px"><h3>ORIGINAL</h3>'; 
    foreach ($list as $k=>$v) echo $k .' = '. $v.'<br>'; 
    echo '</div>'; 

    echo '<div style="float:left"><h3>SORTED</h3>'; 
    foreach ($sorted as $k=>$v) echo $k .' = '. $v .'<br>'; 
    echo '</div>';