2009-06-01 11 views
40

yo quería hacer eco de una imagen cada mensaje después de 3 a través de XML aquí está mi código:PHP: ¿Cómo se determina cada enésima iteración de un ciclo?

<?php 
// URL of the XML feed. 
$feed = 'test.xml'; 
// How many items do we want to display? 
//$display = 3; 
// Check our XML file exists 
if(!file_exists($feed)) { 
    die('The XML file could not be found!'); 
} 
// First, open the XML file. 
$xml = simplexml_load_file($feed); 
// Set the counter for counting how many items we've displayed. 
$counter = 0; 
// Start the loop to display each item. 
foreach($xml->post as $post) { 
    echo ' 
    <div style="float:left; width: 180px; margin-top:20px; margin-bottom:10px;"> 
image file</a> <div class="design-sample-txt">'. $post->author.'</div></div> 
'; 

    // Increase the counter by one. 
    $counter++; 
    // Check to display all the items we want to. 
    if($counter >= 3) { 
    echo 'image file'; 
    } 
    //if($counter == $display) { 
    // Yes. End the loop. 
    // break; 
    //} 
    // No. Continue. 
} 
?> 

aquí es una muestra de la primera 3 son correctas, pero ahora no lo hace idgc.ca/web-design-samples bucle -testing.php

+1

Utilice el modo de formato de código de StackOverflow. Tu código no es legible en este momento. –

+0

¿Cuál es la pregunta? También eche un vistazo a las herramientas de formateo disponibles en el área de texto ... –

+0

Sugiera cambiar la pregunta a algo más descriptivo como "Mostrar imagen en cada enésimo bucle" –

Respuesta

123

La forma más sencilla es utilizar el operador de división de módulo.

if ($counter % 3 == 0) { 
    echo 'image file'; 
} 

¿Cómo funciona esto: división módulo devuelve el resto. El resto siempre es igual a 0 cuando se encuentra en un múltiplo par.

Hay una captura: 0 % 3 es igual a 0. Esto podría dar lugar a resultados inesperados si su contador comienza en 0.

+0

Otro problema es que mi caja de luz ya no funciona ... ¿Hay algún conflicto xml php? –

+0

El módulo es una forma adecuada de hacerlo, pero si está haciendo millones de iteraciones, esto puede convertirse en un cuello de botella de rendimiento, ya que el módulo implica división. En este caso, es mejor utilizar un segundo contador, compararlo con el número deseado y restablecerlo cuando coincida con la comparación. – bhelm

8

Utilice la operación de aritmética de módulo encontrada here en el manual de PHP.

p. Ej.

$x = 3; 

for($i=0; $i<10; $i++) 
{ 
    if($i % $x == 0) 
    { 
     // display image 
    } 
} 

Para una comprensión más detallada de los cálculos de módulo, haga clic en here.

2

¿Qué tal: if (($ contador% pantalla $) == 0)

5

cada 3 mensajes?

if($counter % 3 == 0){ 
    echo IMAGE; 
} 
2

estoy usando esta actualización de un estado para mostrar el carácter "+" cada 1000 iteraciones, y parece estar funcionando bien.

if ($ucounter % 1000 == 0) { echo '+'; } 
8

ir fuera de la respuesta de @ Powerlord,

"Hay una captura: 0% 3 es igual a 0. Esto podría resultar en resultados inesperados si su contador comienza en 0."

Todavía se puede iniciar el contador a 0 (arrays, querys), pero compensarlo

if (($counter + 1) % 3 == 0) { 
    echo 'image file'; 
} 
0

También puede hacerlo sin el módulo. Simplemente reinicia tu contador cuando coincida.

if($counter == 2) { // matches every 3 iterations 
    echo 'image-file'; 
    $counter = 0; 
} 
Cuestiones relacionadas