PHP - Tricky ...

4 Cevap
<?php

$combinedArray = array("apple","banana","watermelon","lemon","orange","mango");


        $num_cols = 3;

        $i = 0;
        foreach ($combinedArray as $r ){
            /*** use modulo to check if the row should end ***/
            echo $i++%$num_cols==0 ? '<div style="clear:both;"></div>' : '';
            /*** output the array item ***/
    ?>
        <div style="float:left; width:33%;">
    <?php
            echo $r;
    ?>
        </div>
    <?php
        }
    ?>
    <div style="clear:both;"></div>

Yukarıdaki kod böyle dizinin yazdıracaktır:

apple --- banana --- watermelon

lemon --- orange --- mango

Ancak, bu gibi gerekir:

apple --- watermelon --- orange

banana --- lemon --- mango

Eğer bu dönüştürmek için nasıl biliyor musunuz? Temelde, dizideki her değeri yukarıda birinin altında yerleştirilmesi gereken, ama orada olacak 7 meyve gibi oldu sürece 3 sütun, ve aynı zamanda sütun / satır başına meyve eşit miktarda (bu aynı yapıya dayalı olmalıdır Bir sütun 3 ve diğer sütunları 2.

Üzgünüm lol kafa karıştırıcı biliyorum

4 Cevap

Yardımlarınız için teşekkürler herkes ... Ama bunu yapmak için daha iyi bir yol gerçekleştirdi. Basit yerine, ben birbirinden yanında yüzen 3 sütun var. Ve her sütunda, ben içine öğelerin bir listesini ekleyin ve ben satır başına maksimum öğeleri vurduğunuzda durdurun.

çalışma kodu:

<div style="float:left; width:33%;">
<?php

        $combinedArraySizeOf = sizeof($combinedArray);
        $num_cols = 3;
        $iPerRow = $combinedArraySizeOf / $num_cols;

        for ($i=0; $i!=$combinedArraySizeOf; $i++){

            if ($i % $iPerRow == 0){
                echo '</div><div style="float:left; width:33%;">';
            }

            echo $combinedArray[$i]."<br />";

        }
?>
</div>
<div style='clear:both;'></div>

Gerekirse sonunda hem temizlemek unutmayın: P

Neden yapmak istediğiniz tam olarak ne yapıyorsun değil mi? Ben yerine satır, sütunlarında göstermek demek?

$combinedArray = array("apple","banana","watermelon","lemon","orange","mango");
$num_cols = 3;
$rowCount = ceil(count($combinedArray)/$num_cols);
$i = 1; // in order the modulus to work correctly

?>
<div style="float: left; width:33%"> <!-- this is the first column -->

foreach ($combinedArray as $r ){
   ?>

   <div> <!-- just a div containing $r -->
      <?php
         echo $r;
      ?>
   </div>
<?php

   // this is where the magic happens
   // check if we have enough rows and start another column
   if ($i % $rowCount == 0) {
      ?>
      </div> <!-- close the previous column and start a new one -->
      <div style="float: left; width:33%"> <!-- this is the new column -->
      <?php
   }

   $i++;
}
?>
</div> <!-- closing the last open column -->
<div style="clear:both;"></div>

Bu sadece istediğiniz iş yapmak gerekir. Eğer divlere olmadan yalnızca tabloları kullanmak istiyorsanız Marvin cevabı daha iyidir.

Bu işe misiniz?

$combinedArray = array("apple","banana","watermelon","lemon","orange","mango");
$num_cols = 3;
$rows = ceil(count($combinedArray)/$num_cols);

for($i = 0; $i < $rows; $i++){
    for($j = 0; $j < $num_cols; $j++){
        echo $combinedArray[(($i+$j) * $rows)-$i];
    }
echo "<br />";
}

Bu da değer öğelerin sayısı sütun sayısına göre tam bölünebilen değildi durumlar için var olduğunu kontrol etmek gerekir, size aşağıdaki değişikliği ile bunu yapabilir:

$combinedArray = array("apple","banana","watermelon","lemon","orange","mango");
$num_cols = 3;
$rows = ceil(count($combinedArray)/$num_cols);

for($i = 0; $i < $rows; $i++){
    for($j = 0; $j < $num_cols; $j++){
        $cell = (($i+$j) * $rows)-$i;
        if($cell > count($combinedArray)) break;
        echo $combinedArray[$cell];
    }
    echo "<br />";
}

Bu düzen, ideal istediğini, ancak bunun tüm tarayıcılarda çalışır kritik değilse, belki coloumn layout (hala çok deneysel CSS3 taslak) bakmak gerekir. Her kolonununda öğesi için dispay inline blok kullanmak eğer bir çare olarak mevcut düzeni olacak.

Ayrıca düzeni için bir tablo kullanırsanız ve bu gibi döngü bir şey için kullanabilirsiniz (pseudo php kod herhangi bir php kodlu beri, bir süre oldu):

maxHeight = Math.ceil(array.length / 3) // meaning length=6 will give 3, 
                                         // length=7 will give 4
$x = -1; // horizontal index
for(i = 0; i < array.length(); i++){
   $y = i % maxHeight; // vertical index 
   if($y == 0){
      $x++;
   }
   addToTable($x,$y, array[i]);
}