开发者

table + foreach - new column?

开发者 https://www.devze.com 2023-04-03 11:44 出处:网络
<?php $values = array(); for($i=0;$i<100;$i++){ $values[$i] = \"aaa\" . $i; } ?> <table> <?php
<?php
$values = array();
for($i=0;$i<100;$i++){
 $values[$i] = "aaa" . $i;
} ?>
<table>
<?php
foreach ($values as $i => $val) {

echo "<tr><td>" . $val . "</td> </tr>";
} ?>
</table>

this generated me:

开发者_开发知识库aaa1
aaa2
...
aaa50
...
aaa90
...
aaa100

how can I make two column?

aaa1   aaa50
aaa2   ....
...    aaa90
aaa50  aaa100

but no:

aaa1 aaa2
aaa3 aaa4
...  ....
aaa99 aaa100


a function

function sqlArr($sql){
  $ret = array();
  $res = mysql_query($sql) or trigger_error(mysql_error()." ".$sql);
  if ($res) {
    while($row = mysql_fetch_array($res)){
      $ret[] = $row;
    }
  }
  return $ret;
}

a code

$temp = sqlArr("SELECT value FROM table");
$data = array();
for($i=0;$i<50;$i++){
  $data[] = array($temp[$i],$temp[$i+50]);
}
unset($temp);

a template

<table border='1'>
<? foreach ($data as $i => $row): ?>
  <tr>
  <? foreach ($row as $cell): ?>
    <td><?=$cell?></td>
  <? endforeach ?>
  </tr>
<? endforeach ?>
</table>


Try if this works for you. Regardless of the format of the items contained in $values, it should print the array the way you want.

<?php

$size = count($values);
$halfSize = intval(ceil($size / 2));

for ($i = 0; $i < $halfSize; $i++) 
{
    $j = $i + $halfSize;

    echo "<tr><td>" . $values[$i]  . "</td>";

    // If $size is odd, $halfSize is rounded up. This means that if we have 
    // 3 elements, it will try to access to $values[3], since $halfSize would
    // be 2. The last second column element should be blank in this case.
    // So, if $halfSize is odd, and $i is the last element, don't print an
    // additional table cell.

    if (!($i == $halfSize - 1 && $size % 2 == 1))
        echo "<td>" . $values[$j]  . "</td>";

    echo "</tr>";
} 

?>


The way that I would do this is to create two separate tables (each one column wide) and then include both of them in a single, two-columned table:

<?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;
?>

Add some CSS to remove padding around the sub-tables and borders etc and you should be good to go.


Since you already numbered it, just abstract it down:

a1  a51
a2  a52
...
a49 a99
a50 a100

is exactly the same as

a1  a1+50
a2  a2+50
...
a50 a50+50

This makes you having the following code:

echo "<table>";

for($i=1; $i<=50; $i++) {
    echo "<tr><td>" . $i . "</td><td>" . ($i+50) . "</td></tr>";
}

echo "</table>";

Note: This requires you to let the table be generated this way. If it's actually not numbered like that, you would have to figure out another way to generate the abstract table in my listing 2 (just think about the index the entries have in relation to their left neighbor).

0

精彩评论

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