1

私が取り組んでいるサイトでは、特定の方法で整理されたデータが必要です。長さが 8 td を超える場合は、2 つの列に分割する必要があります。ここに私のコードがあります。それを行い、カウントを使用してデータを表示するという考えがあったので、配列に入れましたが、それを機能させる方法がわかりませんでした。

        $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

検索対象のエントリの総数を計算しましたが、1 週間に固有のものではありません。追跡するために、そのために多くの変数を作成する必要はありません。

どうすれば希望どおりの結果を得ることができますか?

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が十分でない場合、このコードは3番目の列を追加し続けます。

それでも配列の終わりをテストすることをお勧めします。そのため、$ 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 に答える