Çoklu sütun dinamik PHP listesi

3 Cevap php

Yani ne yapmaya çalışıyorum benim veritabanından tüm farklı ay seçin ve ardından bunları bir liste halinde yazdırmak olduğunu. Yani, ben gerçekleştirebilirsiniz. Sorun iki sütun olmak benim listesini gerekir gerçeği yatıyor. CSS ile bunu başarmak yolu 2 farklı div en "sol" ve sonraki birbirlerine yüzdürülür "hakkını" kullanarak gereğidir. O altıncı ayda yankıları sonra açık bir div kapatılmasını ve yeni bir div yankı gerekiyor, çünkü bu PHP ile bir sorun teşkil etmektedir. Sonra o kapalı ve bitiş kaldığı yerden yeniden başlamak gerekiyor. Ben o ay için DB herhangi bir kayıt yoksa ben bir ay listelemek istemiyorum çünkü ben sadece, ya HTML ay tüm henüz liste değildir. Herhangi bir fikir? Yeterince açık oldu umut!

Teşekkürler!

-Williamg

3 Cevap

Böyle bir şey (temel fikir sadece ayda bir sayımını onlar aracılığıyla döngü gibi bir artış o tutmak için varlık) çalışması gerekir:

<div class="left">

<?php
$x = 1;
foreach($months as $month) {

   # switch to the right div on the 7th month
   if ($x == 7) {
      echo '</div><div class="right">';
   }

   echo "<div class=\"row\">{$month}</div>";

   # increment x for each row
   $x++;

}

</div>

Rant: on

Tablo verilerini görüntülerken, yerine yüzen table kullanmak div. Css devre ile sayfayı görüntüleyen zaman mantıklı olacaktır. Eğer div süzülüyor kullanırsanız, o zaman veriler tüm şekilde aşağı görüntülenir olacaktır. Tüm table kullanımı kötü. İnsanlar sık ​​sık bu yüzden kullanırken, çok table nefret süzülüyor div. Table sadece kötü bir sayfa düzeni için kullanıldığında.

Rant: off

Ben bazı içerik bazı açık yakın ve-arasında ekstra karakteri, ben yapacak kullanımı ile görüntülenen olması gerektiğinde implode. Bu, örnek:

$data = array('column 1', 'column 2');
$output = '<div>'.implode('</div><div>', $data).'</div>';
//result: <div>column 1</div><div>column 2</div>

Sen hemen hemen her şey için bu uzatır. Array ve implode yıllardır sahip php güçtür. Gerektiğinde asla herhangi bir if geçen eleman, ardından kapanış karakteri eklerseniz giriş veya ilk eleman, daha sonra açılış karakter eklemek, ya da öğeler arasındaki ek karakter yazdırmak olmadığını kontrol etmek.

Umarım bu yardımcı olur.

Update:

My bad for misread the main problems asked. Sorry for the rant ;) Here is my code to make a data displayed in 2 column:

//for example, I use array. This should be a result from database
$data = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
//should be 12 month, but this case there are only 9 of it

for ( $i = 0; $i <= 5; $i++)
{
  //here I do a half loop, since there a fixed number of data and the item for first column
  $output = '<div class="left">'.$data[$i].'</div>';
  if ( isset($data[$i+6] )
  {
    $output = '<div class="right">'.$data[$i+6].'</div>';
  }
  echo $output."\n";
}
//the result should be
//<div class="left">1</div><div class="right">7</div>
//<div class="left">2</div><div class="right">8</div>
//<div class="left">3</div><div class="right">9</div>
//<div class="left">4</div>
//<div class="left">5</div>
//<div class="left">6</div>

Diğer çözüm çıkışını biçimlendirmek için CSS kullanarak, bu nedenle sadece div yukarıdan aşağı, sonra css üst kapsayıcı sadece dikey olarak 6 öğeyi uygun hale koymak ve mevcut içeriğin sağ kalanını koydu . Genellikle adam css tasarımcı ya da benim müşteri tarafından sağlanan beri ben bu konuda fazla bilgim yok.

Örnek nesnelerin bir dizi var varsayar.

<div style="width:150px; float:left;">
<ul>
<?php

$c = count($categories);

$s = ($c / 3); // change 3 to the number of columns you want to have.

$i=1;
foreach($categories as $category)
{
    echo '<li>' . $category->CategoryLabel . '</a></li>';
    if($i != 0 && $i % $s == 0)
    {
        ?>
        </ul>
        </div>
        <div style="width:150px; float:left;">
        <ul>
        <?php
    }
    $i++;
}

?>
</ul>
</div>