php html if-statement while-loop

php - Nuevo que contiene div después de cada 3 registros



html if-statement (3)

Me gustaría crear un nuevo que contenga <div> después de 3 resultados, usando el bucle de resultados PDO.

Para mi proyecto de autoestudio, tengo que hacer una página de producto con bootstrap y después de cada 3er registro tengo que hacer una nueva fila y mostrar nuevamente 3 col-md-4, etc., etc.

Ahora tengo esto como mi código:

<div class="row"> <?php while ($row = $stmt->fetch(PDO::FETCH_OBJ)) { ?> <div class="col-md-4"> <div class="product"> <div class="title"><?php echo $row->pname ?></div> <div class="img"><img src="../product/img/<?php echo $row->pnumber ?>/<?php echo $row->pthumbnail ?>.jpg?$pop210x210$"/> </div> <div class="vijftien"></div> <div class="deliver">Levertijd: <strong><?php echo $row->pdelivertime ?></strong></div> <div class="vijf"></div> <div class="other"></div> <div class="row"> <div class="col-md-6"> <div class="price"><?php echo $row->pprice ?></div> </div> <div class="col-md-6"> <div class="order"> <button class="log_in" id="doLogin">Meer informatie</button> </div> </div> </div> </div> </div> <?php } ?> </div>

He visitado y estudiado otras preguntas, pero realmente no entiendo cómo lo están haciendo y cómo puedo implementar el método correcto en mi código.


$ x = 0; eco "";

foreach ($ filas como $ fila) {/ * agregó una condición más para eliminar el div vacío ... * /

if ($x != 0 && $x % 3 == 0 && $x < count($rows)) { echo "</div>/n<div class=''row''>"; } echo "<div>$row</div>"; ++$x;

}

eco "";


Como dijo tadman en el comentario debajo de su pregunta. El mejor enfoque debe usar un operador de módulo ( % ) con 3 .

Coloque su condición de separación al comienzo de cada iteración. ( Demo )

Me gusta esto:

$x=0; // I prefer to increment starting from zero. // This way I can use the same method inside a foreach loop on // zero-indexed arrays, leveraging the keys, and omit the `++` line. echo "<div class=/"row/">"; foreach($rows as $row){ if($x!=0 && $x%3==0){ // if not first iteration and iteration divided by 3 has no remainder... echo "</div>/n<div class=''row''>"; } echo "<div>$row</div>"; ++$x; } echo "</div>";

Esto creará:

<div class="row"><div>one</div><div>two</div><div>three</div></div> <div class=''row''><div>four</div><div>five</div><div>six</div></div>

Edición tardía, aquí hay otros métodos para situaciones similares que proporcionarán el mismo resultado:

foreach(array_chunk($rows,3) as $a){ echo "<div class=/"row/"><div>",implode(''</div><div>'',$a),"</div></div>/n"; }

o

foreach ($rows as $i=>$v){ if($i%3==0){ if($i!=0){ echo "</div>/n"; } echo "<div class=/"row/">"; } echo "<div>$v</div>"; } echo "</div>";

Para aclarar qué NO hacer ...

La respuesta de Sinan Ulker conducirá a un resultado no deseado dependiendo del tamaño de su matriz de resultados.

Aquí hay un ejemplo generalizado para exponer el problema:

Usando esta matriz de entrada para representar sus resultados de pdo:

$rows=["one","two","three","four","five","six"];

Condición de Sinan al final de cada iteración:

$i=1; echo "<div class=/"row/">"; foreach($rows as $row){ echo "<div>$row</div>"; if($i%3==0)echo "</div>/n<div class=''row''>"; // 6%3==0 and that''s not good here // 6%3==0 and will echo the close/open line after the content to create an empty, unwanted dom element $i++; } echo "</div>/n/n";

Creará esto:

<div class="row"><div>one</div><div>two</div><div>three</div></div> <div class=''row''><div>four</div><div>five</div><div>six</div></div> <div class=''row''></div> //<--- this extra element is not good


Debe agregar una nueva etiqueta de cierre y abrir una nueva cada 3ra iteración.

<div class="row"> <?php $sql = "SELECT * FROM products"; $stmt = $conn->query($sql); $stmt->execute(); $i=1; while ($row = $stmt->fetch(PDO::FETCH_OBJ)) { ?> <div class="col-md-4"> <div class="product"> <div class="title"><?php echo $row->pname ?></div> <div class="img"><img src="../product/img/<?php echo $row->pnumber ?>/<?php echo $row->pthumbnail ?>.jpg?$pop210x210$"/> </div> <div class="vijftien"></div> <div class="deliver">Levertijd: <strong><?php echo $row->pdelivertime ?></strong> </div> <div class="vijf"></div> <div class="other"></div> <div class="row"> <div class="col-md-6"> <div class="price"><?php echo $row->pprice ?></div> </div> <div class="col-md-6"> <div class="order"> <button class="log_in" id="doLogin">Meer informatie</button> </div> </div> </div> </div> </div> <?php if($i%3==0)echo "</div><div class=''row''>"; $i++; } ?>