2009-09-10 13 views
8

questo è il mio codice: http://www.pcgage.net/code.zip (mi dispiace, incollare il codice lo ha fatto davvero rovinare, anche usando il contenitore del codice).php: come aggiungere un loop pari/dispari nell'array

Scorrere fino alla riga: da 160 (a 174) - questo è il ciclo in questione. Voglio renderlo così questa è la parte pari, e poi un po 'di codice per creare una parte dispari, quindi il ciclo si ripete in questo ordine. Il motivo è che voglio cambiare il contenuto di questo ciclo alternativamente.

io non sono un programmatore, quindi la cosa migliore che si possa fare è quello di inserire il nuovo codice e io aggiungo in cui mi dici troppo, altrimenti mi perdo :)

Speranza questo ha un senso, se non è possibile controllare un precedente post su questo problema che spiega il motivo per cui ho bisogno di questo (dopo aver scoperto che i CSS da sola non può risolvere il mio problema): css/php: how to solve this div float problem/odd even loop in array

questo è il ciclo:

} elseif (($findpost->ID) != $id) { 

// all other posts except the current post 

        $serp_list_li[] = '<div class="serial-contain"> 

<div class=""><h5><a href="' . get_permalink($findpost->ID) . '" title="' . $findpost->post_title . '">' . $findpost->post_title . '</a></h5></div> 

<div class="text-align">' . $findpost->post_excerpt . ' </div> 

<div class="date"> ' . mysql2date('M jS, Y', $findpost->post_date) . ' at ' . mysql2date('g:ia', $findpost->post_date) . '</div> 


<div class="comments"><a href="' . get_permalink($findpost->ID) . '#comments" title="' . $findpost->post_title . '"><b>' . $findpost->comment_count . ' Comments</b></a></div> 


</div>' . "\n"; 
       } 



else {    
+0

io non sono sicuro esattamente quello che stai chiedendo, ma ho trovato il tuo codice grazie s alla tua modifica del primo post (riga 320 o giù di lì per qualche motivo nel mio editor, molte nuove righe extra nel tuo codice). Fornisco due correzioni a seconda di cosa stai chiedendo, cosa su cui sono un po 'oscuro, ma questa soluzione dovrebbe funzionare a meno che non abbia perso un terzo problema. – scragar

+0

@scragar, hai aiutato ad andare oltre, ma sembra che ci sia un problema, vedi sopra. – Jim

+0

dovresti davvero usare un motore di template! si sta incasinando codice e design –

risposta

8

Non ho esaminato il codice, ma se sta usando una varia ble per contare il numero di loop che si può fare:

for($i=0;$i<$blah;$i++) 
    if($i&1){ 
    // ODD 
    }else{ 
    // EVEN 
    } 

EDIT (1): ho guardato la sezione che si sta eseguendo in, e ora ho un altro problema, io sono sicuro di come si sta giudicare ciò che dovrebbe sarà pari o no, quindi vi propongo due risposte:

1: dispari ciclo itteration:

/* Populate the post list array */ 
// Add here: 
    $oddLoop = false; 
    foreach ($findposts as $findpost): 
//..... 
if($oddLoop=!$oddLoop){ 
    // code for odd loop numbers 
}else{ 
    // code for even loop numbers 
} 

2: numero ID dispari:

} elseif (($findpost->ID) != $id) { 
    if($findpost->ID & 1){ 
     // ODD 
    }else{ 
     //EVEN 
    } 
+0

vorrei essere abbastanza sicuro di provare a mettere questo nel posto giusto, ma io non sono. Da allora ho inserito il codice loop nel post, spero che possa aiutarti a mostrarmi dove metterlo, grazie! – Jim

+0

Devo aver contato con alcune righe vuote in là, cercare questa riga di commento: // tutti gli altri messaggi, tranne il post corrente è questo ciclo. – Jim

+0

Capisco il passaggio 2, solo il passaggio 1. Supponiamo che sostituirò tutto da/* Compila l'array dell'elenco dei post */per // abbiamo il post corrente e il link deve essere mostrato - per il tuo nuovo codice, cosa sarebbe sarà allora? Scusa, non sto bene con php :( – Jim

34

Le tre vie sono

Modulo

for ($i = 0; $i < 10; $i++) 
{ 
    if ($i % 2 == 0) 
    { 
    echo "even"; 
    } 
    else 
    { 
    echo "odd"; 
    } 
} 

Flipping valore booleano

$even = true; 
for ($i = 0; $i < 10; $i++) 
{ 
    if ($even) 
    { 
    echo "even"; 
    } 
    else 
    { 
    echo "odd"; 
    } 

    $even = !$even; 
} 

E menzionati operatore booleano

for ($i = 0; $i < 10; $i++) 
{ 
    if ($i & 1 == 0) 
    { 
    echo "even"; 
    } 
    else 
    { 
    echo "odd"; 
    } 
} 

Il più veloce è operatore booleano. Ma il metodo più efficace è il flipping se si hanno numeri molto diversi (come il passaggio di numeri ID e alcuni mancanti).

+0

mentre io Sono sicuro che funzioneranno tutti, non sono un programmatore, quindi mod il tuo codice per lavorare nella mia sceneggiatura, beh, non ne ho idea.Grazie, però. – Jim

+0

grazie anche qui .. – Peanuts

+0

Grazie anche qui =) –

0

Sei sicuro che $ findpost-> ID contenga numeri sequenziali?

Si potrebbe sostituire il if/else con s breve dichiarazione ternario in questo modo:

$side = empty($side) || $side == 'right' ? 'left' : 'right'; 
$serp_list_li[] = '<div class="serial-contain-' . $side . '">' // ...the rest 

Ciò aggiungere un lato 'left' prima.

2

Se mai elimina un articolo che potrebbe essere in difficoltà - il codice presuppone che corre ID (dispari, pari, dispari, pari), ecc

Un'idea migliore potrebbe essere quella di creare un oggetto iteratore separata per alimentare tu i valori necessari ad ogni passo.Ecco quello che io uso:

class LoopingPropertyIterator implements Iterator { 
private $startat=0, $position=0; 
private $propertylist=array(
    'boolean' => array(false, true), 
    'day' => array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), 
    'dow' => array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat') 
); 

public function __construct($args, $startat=0) { 
    $this->startat = (int) $startat; 
    $this->position = $this->startat; 

    foreach($args as $name => $arr) 
    $this->__set($name, $arr); 
} 

public function __get($name) { 
    if (!array_key_exists($name, $this->propertylist)) 
    throw new Exception(__METHOD__." unknown property $name"); 

    $t =& $this->propertylist[$name]; 

    if (is_array($t)) 
    return $t[ $this->position % count($t) ]; 
    else 
    return $t; 
} 

public function __set($name, $arr) { 
    $this->propertylist[$name] = $arr; 
} 
public function current() { return $this->position; } 
public function key() { return $this->position; } 
public function next() { ++$this->position; } 
public function rewind() { $this->position=$this->startat; } 
public function valid() { return true; } 
} 

quindi l'output si semplifica in

$iter = new LoopingPropertyIterator(array(
    'outerclass' => array('serial-contain-right','serial-contain-left'), 
    'innerclass' => array('text-align2','text-align') 
)); 

... 

elseif ($findpost->ID != $id) { 
    $link = get_permalink($firstpost->ID); 
    $title = $findpost->post_title; 
    $datetime = mysql2date('M jS, Y', $findpost->post_date).' at '.mysql2date('g:ia', $findpost->post_date); 

    $serp_list_li[]= 
<<<TEXT 
    <div class="{$iter.outerclass}"> 
     <div class="title"> 
      <h5><a href="{$link}" title="{$title}">{$title}</a></h5> 
     </div> 
     <div class="{$iter->innerclass}">{$findpost->excerpt}</div> 
     <div class="date">{$date}</div> 
     <div class="comments"> 
      <a href="{$link}#comments"> title="{$title}"> 
       <b>{$findpost->comment_count} Comments</b> 
      </a> 
     </div> 
    </div> 
TEXT; 

    $iter->next(); 
} 
+0

suona alla grande, ma tutto ciò è diventato complesso per qualcuno che non scrive codice (io). A meno che non riesca a ottenere l'aggiornamento del file php da parte di qualcuno e postato, non riuscirò mai a farlo funzionare :( – Jim

+0

Ho patchato il tuo file su http://pastebin.com/m2606fee0 per te - come puoi vedere, è solo un questione di tagliare e incollare nei punti appropriati Spero che questo aiuti –

5

stato usando all'interno del ciclo:

$class = 'odd'; 
for(.........) # no problem what kind of loop you are using(for,foreach,while,do) 
{ 
    $class = ($class == 'even' ? 'odd' : 'even'); 
    #some code 
} 
+1

Questo è un approccio molto dolce – Banago

+0

approccio super pulito –

0

Get EvenArray e OddArray

NSArray *numberArray = [NSArray arrayWithObjects:@1,@2,@3,@4,@6,@8,@10, nil]; 
for (id object in numberArray) 
    { 
     if ([object integerValue] % 2 == 0) 
     { 
      [evenArray addObject:object]; 
     } 
     else 
     { 
      [oddArray addObject:object]; 
     } 
    }