开发者

how can put value in two columns?

how can a list of values that select of database, put in two columns together by PHP ?

EX开发者_StackOverflow社区AMPLE:

values select of database:

  • Internet
  • Game Notes
  • Internet
  • Pool
  • Coffee
  • Game Notes

i want like this:

how can put value in two columns?


Row-first order

<table>
<?php
    $left = true;
    foreach ($values as $value){
        if ($left)
            echo "<tr>";
        echo "<td>$value</td>";
        if (!$left)
            echo "</tr>";
        $left = !$left;
    }
?>
</table>

With column-first order (as in your sample) you'll have to involve CSS and it's much complex. Something like

<div class='inline_div'>
<?php 
    $middle = count($values)/2+1;
    $count = 0;
    foreach ($values as $value){
        if ($count==$middle)
            echo "</div><div class='inline_div'>";
        echo "$value<br/>";
        ++$count;
    }
?>
</div>

inline_div is something like .inline_div {display:inline; float:left}. But that will definitely not work as expected, I'm no CSS master. IE does not support display:inline for sure.


If you want it exactly like you want in your example then you are going to have to read the whole table into memory, calculate the mid-point element and then build your table from that using a base point, an offset and a check to ensure that you've not repeated anything which involves a whole load of calculation.

A way around this would be to build two separate tables (each containing a single column) and then enclose them in a single table with two columns:

<?php
$list=array('a','b','c','d','e','f');
$midpoint=floor(count($list)/2);
$tableHeader='<table width="100%">';
$tableFooter='</table>';
$leftTable=$tableHeader;
$rightTable=$tableHeader;
for ($c=0; $c<$midpoint; $c++)
{
    $leftTable.='<tr><td width="100%">'.$list[$c].'</td></tr>';
}
$leftTable.=$tableFooter;
for ($c=$midpoint; $c<count($list); $c++)
{
    $rightTable.='<tr><td width="100%">'.$list[$c].'</td></tr>';
}
$rightTable.=$tableFooter;
$mainTable='<table><tr><td width="50%">'.$leftTable.'</td><td width="50%">'.$rightTable.'</td></tr></table>';
echo $mainTable;
?>

Or something along those lines. I haven't tested this code but it would be pretty close (may have to adjust the values in the "for" sections


The simple solution would be to use two divs. As a previous poster commented, you first need to count the elements. Suppose the items you want to display are in an array $items You can use this kind of code

<?php
$divItemCount = (count($items)%2) ? count($items)/2 + 1 : count($items)/2;
?>
<div id="leftdiv" style="width: 30%;">
<ul>
<?php
for($i=0; $i<$divItemCount; $i++) {
    echo '<li>'. $items[$i] .'</li>';
}?>
</ul></div><div id="rightdiv" style="width: 30%; float:left"><ul>
<?php
for($j=$i; $j<count($items); $j++) {
    echo '<li>'. $items[$j] .'</li>';
}?>
</ul></div>

I have not tested the code so there may be errors. You can use the border property in the divs to create a custom separator between the two lists.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜