1

我正在处理的网站希望以特定方式组织数据。如果它的长度超过 8 td,我需要将它分成两列。这是我现在的代码。我已经将它放入一个数组中,因为我有一个关于这样做并使用计数来显示数据的想法,但我还没有弄清楚如何让它工作。

        $resultFound = false;
        $prevWeek = -1;
        $count = 0;

        while($row = mysqli_fetch_array($result)) {
            $adjustedWeek = dateToWeek($row['date']) - 35;
            if($_GET['keywords'] != "") {
                $id = search($row, $_GET['keywords']);
                if($row['id'] == $id) {
                    if($validWeek) {
                        if($week == $adjustedWeek) {
                            include('test2.php');
                        }
                    }
                    else {
                        include('test2.php');
                    }
                }
            }
          foreach($tableArray as $table) {
               echo $table;
          }

这是我的 test2.php 代码

$table = "";
if($prevWeek != $adjustedWeek) {
    $table .= ('<th colspan=2>Week' . $adjustedWeek . '</th>');
    $prevWeek = $adjustedWeek;
}
$table .= '<tr>';
$table .= ('<td colspan=12><a href="details.php?id=' . $row['id'] . '">'
    . getGameTitleText($row) . '</a></td>');
$table .= '</tr>';
$resultFound = true;
$tableArray[] = $table;
$count++;

我需要代码来做这样的事情:

If (all items of any week > 8)
        write out 8 items to column one
        then write the rest to column two

我已经计算了它正在搜索的条目总数,但不是特定于一周,我不想为此做很多变量来跟踪。

我怎样才能得到我想要的结果?

4

2 回答 2

0

警告!!下面的代码只是为了说明这个想法。未在机器上测试,但我认为您可以消除可能的错误。

伪代码示例:

$arr=array();
while($row = mysqli_fetch_array($result)) {
    $arr[]['data']=$row['data'];
    $arr[]['whatever']=$row['whatever'];
}
$columns=floor(count($arr)/8);
$output="<table>";
foreach ($arr as $i=>$a){
    $output.="<tr>";
    $output.="<td>{$arr[$i]['data']}</td>";
    if ($columes>0){
        for($j=0;$j<$columes;$j++){
            $row_number=$i+($j+1)*8;
            $output.="<td>{$arr[$row_number]['data']}</td>";
        }
    }
    $output.="</tr>";
}
$output.="</table>";

如果 2 不够,此代码将继续添加第三列。

您可能仍想对数组的末尾进行测试,因此当 $row_number 大于 count($arr) 时,您不会收到一堆警告

于 2012-10-18T20:05:40.773 回答
0

这就是我最终做到的方式。这有点“脏”,因为它在开头回显了一个额外的 /table 和 /tr ,但它适用于我的目的并且比已经发布的代码更简单。这对我来说太复杂了

$table = "";
if($prevWeek != $adjustedWeek) {
    $table .= '</tr></table><table class="vault_table">';
    $table .= ('<tr><th>Week ' . $adjustedWeek . '</th></tr>');
    $table .= '<table class="vault_table">';
    $prevWeek = $adjustedWeek;
}
if($count % 2 == 0) {
    $table .= '<tr>';
}
$table .= ('<td><a href="details.php?id=' . $row['id'] . '">'
. getGameTitleText($row) . '</a></td>');

$resultFound = true;
$tableArray[] = $table;
$count++;

该类仅用于样式表。与它的布局方式没有任何关系。除了桌子的每一边是容器的 50% 宽度

于 2012-10-19T04:10:18.600 回答