2009-06-01 14 views
40

Volevo eco un'immagine ogni dopo 3 postale tramite XML qui è il mio codice:PHP: come si determina ogni ennesima iterazione di 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. 
} 
?> 

ecco un primo campione di 3 sono corrette, ma ora non è così idgc.ca/web-design-samples anello -testing.php

+1

Utilizzare la modalità di formattazione del codice StackOverflow. Il tuo codice non è leggibile in questo momento. –

+0

Qual è la domanda? Guarda anche gli strumenti disponibili nella textarea. –

+0

Suggerisci di cambiare la domanda in qualcosa di più descrittivo come "Mostra immagine su ogni ciclo N" –

risposta

123

Il modo più semplice è utilizzare l'operatore di divisione modulo.

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

Come funziona: divisione Modulo restituisce il resto. Il resto è sempre uguale a 0 quando sei in un multiplo pari.

C'è un problema: 0 % 3 è uguale a 0. Ciò potrebbe portare a risultati inaspettati se il contatore inizia da 0.

+0

un altro problema è che il mio lightbox non ha funzionato più .... c'è qualche conflitto php xml? –

+0

Il modulo è un modo corretto per farlo, ma se si eseguono milioni di iterazioni, questo può diventare un collo di bottiglia per le prestazioni, poiché il modulo implica la divisione. In questo caso, è meglio utilizzare un secondo contatore, confrontarlo con il numero desiderato e reimpostarlo quando si confronta. – bhelm

8

Utilizzare l'operazione aritmetica modulo trovata here nel manuale PHP.

ad es.

$x = 3; 

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

Per una comprensione più dettagliata dei calcoli modulo, fare clic su here.

2

ne dite: if (($ contatore% $ display) == 0)

5

ogni 3 messaggi?

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

Sto usando questo aggiornamento di uno status per mostrare un carattere "+" ogni 1000 iterazioni, e sembra funzionare bene.

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

Andando fuori di @ risposta di Powerlord,

"C'è un problema: 0% 3 è uguale a 0. Ciò potrebbe portare a risultati inaspettati se il contatore inizia a 0."

È ancora possibile avviare il contatore a 0 (array, querys), ma è compensato

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

Si può anche fare senza modulo. Reimposta il tuo contatore quando corrisponde.

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