2012-12-09 9 views
5

は、私が失敗し、それがこの順phpを使って3つの列にリストを表示するには?時間の過去のカップルのため

A D G 
B E H 
C F I 

を持つように3列にリストを表示するには、PHPコードを把握しようとしてきたが、私は本当に迷ってしまいました。誰もこれで私を助けることができますか? 私は現在、唯一のこれが私の現在のコードである。このため

A B C 
D E F 
G H I 

に一覧表示されますコードを持っている:

echo '<table><tr>'; 
foreach ($categories as $k => $category) { 
    if ($k % 3 == 0 && $k ! = 0) { 
     echo '</tr><tr>'; 
    } 
    echo '<td><a href="category.php?category='.$category["id"].'">'.$category["category"].'</a></td>'; 
} 
echo '</table>'; 
+0

それらは常に使用される数字ですか? –

+0

実際には、使用法では文字のみになります。 –

+0

[stackoverflow。com/questions/6938094/foreach-from-to-downからデータベースからのデータ#6938762](http://stackoverflow.com/questions/6938094/data-from-database-with-foreach-from) - トップダウン#6938762)。 – Sean

答えて

4

はこれを試してみてください:

$columns = 3; 
$rows = ceil(count($categories)/$columns); 

echo '<table>'; 

for ($row = 0; $row < $rows; $row++) { 
    echo '<tr>'; 

    foreach ($categories as $k => $category) { 
     if ($k % $rows == $row) { 
      echo '<td><a href="category.php?category='.$category["id"].'">'.$category["category"].'</a></td>'; 
     } 
    } 

    echo '</tr>'; 
} 

echo '</table>'; 

それは非常に効率的ではないですが、今の私それをより良い方法で考えることはできません。

+0

ありがとう!これは素晴らしい作品です!私のデータセットはそれほど大きくはないので、それはいいはずです。 –

4

あなたが示すように、列にをレンダリングリストを持っているしたい場合は、論理的な順序でそれを生成し、ちょうど列に設定するcolumnsプロパティをCSSを使用できます。

ul { 
    -moz-column-count: 2; 
    -webkit-column-count: 2; 
    column-count: 2; 
} 

悪いニュースがありますこれはIE 9以前ではサポートされていませんが、css3-multi-column.jsのようなColumnsポリフィルは、単純なケースでは(制限や問題にもかかわらず)十分にうまくいく可能性があります。

3

私はこれと同じ問題を持っていた、と私は次のような理由から、この古い質問に対する私の答えを投稿しています:

  1. 私の答えは、より一般的で適応する他の人のために簡単です。
  2. 私の配列は文字列キーで結合されていました。ところで、私の答えは、連想配列とインデックス配列の両方で動作します。
  3. 私は複雑なCSSソリューションを望んでいませんでした。このトピックのその他の回答のいくつかと同じです。実際には、私が思いついた解決策はかなりシンプルでした。巨大なテーブルの中にstyle = "float:left"という複数のタグを使用しました。 1つのテーブルに複数のtbodyタグを置くと、HTMLの検証に合格するという疑問がありましたが、実際にはエラーなしで渡されました。

には、いくつかの注意事項:

  • $ NUMCOLSは、列の希望数です。
  • 私たちはフローティングアイテムなので、親要素の幅と幅を設定するか、状況に応じて< br style = "clear:both"/>を追加する必要があります。私はあなたがこの回答が役に立つことを願っ

    function sortVertically($data = array()) 
    { 
        /* PREPARE data for printing */ 
        ksort($data);  // Sort array by key. 
        $numCols = 3; // Desired number of columns 
        $numCells = is_array($data) ? count($data) : 1 ; 
        $numRows = ceil($numCells/$numCols); 
        $extraCells = $numCells % $numCols; // Store num of tbody's with extra cell 
        $i   = 0; // iterator 
        $cCell  = 0; // num of Cells printed 
        $output  = NULL; // initialize 
    
    
        /* START table printing */ 
        $output  .= '<div>'; 
        $output  .= '<table>'; 
    
        foreach($data as $key => $value) 
        { 
         if($i % $numRows === 0) // Start a new tbody 
         { 
          if($i !== 0)   // Close prev tbody 
          { 
           $extraCells--; 
           if ($extraCells === 0) 
           { 
            $numRows--;  // No more tbody's with an extra cell 
            $extraCells--; // Avoid re-reducing numRows 
           } 
           $output .= '</tbody>'; 
          } 
    
          $output .= '<tbody style="float: left;">'; 
          $i = 0;     // Reset iterator to 0 
         } 
         $output .= '<tr>'; 
          $output .= '<th>'.$key.'</th>'; 
          $output .= '<td>'.$value.'</td>'; 
         $output .= '</tr>'; 
    
         $cCell++;     // increase cells printed count 
         if($cCell == $numCells){ // last cell, close tbody 
          $output .= '</tbody>'; 
         } 
    
         $i++; 
        } 
    
        $output .= '</table>'; 
        $output .= '</div>'; 
        return $output; 
    } 
    

    :代替ソート方法について

  • 、参照 http://php.net/manual/en/array.sorting.php

は、ここに私の完全な答えです。

関連する問題