таблица + foreach - новый столбец? - PullRequest
0 голосов
/ 06 сентября 2011
<?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>

это сгенерировало меня:

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

как мне сделать два столбца?

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

но нет:

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

Ответы [ 4 ]

1 голос
/ 06 сентября 2011

функция

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

код

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

шаблон

<table border='1'>
<? foreach ($data as $i => $row): ?>
  <tr>
  <? foreach ($row as $cell): ?>
    <td><?=$cell?></td>
  <? endforeach ?>
  </tr>
<? endforeach ?>
</table>
1 голос
/ 06 сентября 2011

Попробуйте, если это работает для вас. Независимо от формата элементов, содержащихся в $ values, он должен печатать массив так, как вы хотите.

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

?>
0 голосов
/ 06 сентября 2011

Способ, которым я хотел бы сделать это, состоит в том, чтобы создать две отдельные таблицы (каждая шириной в один столбец), а затем включить их обе в одну таблицу с двумя столбцами:

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

Добавьте немного CSS для удаления отступов вокруг вложенных таблиц, границ и т. Д., И все будет хорошо.

0 голосов
/ 06 сентября 2011

Поскольку вы уже пронумеровали его, просто абстрагируйте его:

a1  a51
a2  a52
...
a49 a99
a50 a100

точно так же, как

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

Это дает вам следующий код:

echo "<table>";

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

echo "</table>";

Примечание: Для этого необходимо, чтобы таблица генерировалась таким образом. Если на самом деле он не нумеруется, вам нужно найти другой способ создания абстрактной таблицы в моем листинге 2 (просто подумайте об индексе, который имеют записи в отношении их левого соседа).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...