0

以下を使用して、PHPの連想配列から15行2列のテーブルを印刷します。

<table id="freq-table" class="table-list" cellspacing="0" cellpadding="10">
<tbody>
    <?
    $rowCount = 0;
    foreach($word_frequency as $word => $frequency) if ($rowCount++ < 15) {?>
        <tr>
            <td><? echo $word; ?></td>
            <td<? echo $frequency; ?></td>
        </tr>
    <?}?>
</tbody>
</table>

正常に動作しますが、ページの垂直方向のスペースを取りすぎます。これを5行2列の3つの並べたテーブルにフォーマットし、最初のグループに配列項目1〜5、2番目のグループに6〜10、最後のグループに11〜15を含めるにはどうすればよいですか?(次の図を参照):

key1  value1  |  key6   value6   |  key11   value11
key2  value2  |  key7   value7   |  key12   value12
...
...
key5  value5  |  key10  value10  |  key15   value15 

私はさまざまなテーブル、div、コンテナー、および複数のループの実験を試しましたが、結果は非常に複雑です(そして不適切です)。前もって感謝します。

4

4 に答える 4

2

複数の列を使用してこの視覚効果を実現することもできるため、テーブルを生成するコードを少しわかりやすくするために、事前にデータをフォーマットすることをお勧めします。

<?php
  // Format the array data so each row contains all of the columns needed
  $rows = array();
  $max_per_column = 5;
  $max_words = 15;
  $rows = array_pad($rows, $max_per_column, array());
  $count = 0;
  foreach ($word_frequency as $word => $frequency) {
    if ($count >= $max_words) {
      break;
    }
    array_push($rows[$count % $max_per_column], $word, $frequency);
    $count++;
  }
?>
<table id="freq-table" class="table-list" cellspacing="0" cellpadding="10">
  <tbody>
    <?php
      foreach ($rows as $cols) {
        echo '<tr><td>' . implode('</td><td>', $cols) . '</td></tr>';
      }
    ?>
  </tbody>
</table>
于 2013-03-24T04:50:03.973 に答える
1

これを行う唯一の方法は、数字キーを使用することです。例えば

 $word_frequency[0] = array();
 $word_frequency[0]['word'] = "some word";
 $word_frequency[0]['frequency'] = 10;
 ...
 $word_frequency[15] = array();
 $word_frequency[15]['word'] = "some other word";
 $word_frequency[15]['frequency'] = 14;

配列を取得したら、次のようにループを繰り返すことができます

<table id="freq-table" class="table-list" cellspacing="0" cellpadding="10">
  <tbody>
<?
$rowCount = 0;
 for($i = 0; $i <= 5; $i++) { 
    $word[0] = $word_frequency[$i]["word"];
    $frequency[0] = $word_frequency[$i]["frequency"];
    $word[1] = $word_frequency[$i + 5]["word"];
    $frequency[1] = $word_frequency[$i + 5]["frequency"];
    $word[2] = $word_frequency[$i + 10]["word"];
    $frequency[2] = $word_frequency[$i + 10]["frequency"];
    ?>
     <tr>
    <?
    for($x = 0; $x <= 2; $x++ ){
 ?>

        <td><? echo $word[$x]; ?></td>
        <td<? echo $frequency[$x]; ?></td>

    <?
    }
    ?>
     </tr>

    <?
  }
    ?>
 </tbody>
 </table>

すべての$iループが行を作成し、$xループが列を作成します。もちろん、これは、少なくとも15個のアイテムがあり、キーと値のペアの5行と3列のみを作成することを前提としています。

于 2013-03-24T04:31:00.527 に答える
1

そのようなことを試してみてください。

<table width="100%">
<tr>
<?php
    $rowCount = 0;
    foreach($word_frequency as $word => $frequency) if ($rowCount < 15) { ?>
   <?php if($rowCount % 5 == 0) {  ?>
     <td><table border=1>
   <?php } ?>                   
       <tr>
         <td><?php echo $word; ?></td>
         <td><?php echo $frequency; ?></td>
       </tr>
       <?php if($rowCount % 5 == 4) {  ?>
     </table></td>
   <?php } ?>                   
<?php $rowCount++; } ?>
</tr>
</table>
于 2013-03-24T04:32:17.167 に答える
1

まあ、私がそれをしているなら、私はおそらくcss列を持つulを使うでしょう:D

http://davidwalsh.name/css-columns

ただし、これは「プログラム的に」行うことではありません。

配列を順番に調べる必要がない場合に役立つ場合があります。

あなたが持っているものを見ると、インデックスにはパターンがあります:

i + 0x、i + 1x、i + 2x、..。

ここで、xはアイテムの数を列の数で割ったものです。

そして、i=合計/xのときに反復を停止します

疲れすぎてこれをコーディングできず申し訳ありませんが、要点は次のとおりです。

$myarray = [1 ... 15];
$columns = 3;

$arrayKeys = array_keys($myarray);
$total = count($array);
$x = floor $total  / $column;

for ($i = 0; $i > $x; $i += $x + 1 ){
  echo $arrayKeys[$i] . " - " . $myarray($arrayKeys[$i]);
  echo $arrayKeys[$i + $x] . " - " . $myarray($arrayKeys[$i + $x]);
  echo $arrayKeys[$i + ($x * 2) ] . " - " . $myarray($arrayKeys[$i + ($x * 2)]);
}

またはそのようなもの...それは私の頭のてっぺんから外れていて、いくつかの問題があると思いますが、あなたはそれをうまくいくものに打ち負かすことができるはずです。

于 2013-03-24T04:38:26.410 に答える