2009-09-10 8 views
8

hier ist mein Code: http://www.pcgage.net/code.zip (tut mir leid, Einfügen der Code verursachte es wirklich zu versauen, auch mit dem Code-Container).php: wie ungerade/gerade Schleife in Array

Zu Zeile scrollen: 160 (bis 174) - dies ist die betreffende Schleife. Ich möchte es so machen, dass dies der gerade Teil ist, und dann etwas Code, um einen ungeraden Teil zu machen, also wiederholt sich die Schleife in dieser Reihenfolge. Der Grund ist, dass ich den Inhalt dieser Schleife wechseln möchte.

Ich bin kein Programmierer, so dass das Beste, was Sie tun können, ist den neuen Code zu schreiben und ich werde es in hinzufügen, in dem Sie mir sagen, sonst werde ich verloren gehen :)

Hoffnung das macht Sinn, wenn nicht, können Sie einen früheren Beitrag zu diesem Problem überprüfen, die erklärt, warum ich diese müssen (nach dem CSS allein herauszufinden, kann mein Problem nicht lösen): css/php: how to solve this div float problem/odd even loop in array

dies die Schleife:

} 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

Ich bin nicht sicher genau das, was du fragst, aber ich fand deinen Code danke s zu Ihrer Bearbeitung des ersten Beitrags (Zeile 320 oder so aus irgendeinem Grund in meinem Editor, viele extra neue Zeilen in Ihrem Code). Ich stelle zwei Fixes zur Verfügung, je nachdem, was Sie fragen, was mir etwas unklar ist, aber diese Lösung sollte funktionieren, wenn ich ein drittes Problem nicht verpasst habe. – scragar

+0

@scragar, du hast geholfen weiter zu kommen, aber es scheint ein Problem zu geben, siehe oben. – Jim

+0

sollten Sie wirklich eine Template-Engine verwenden! du versaust Code und Design –

Antwort

8

Ich habe nicht über den Code, aber wenn es eine Varia verwendet ble die Schleife Zahl zählen Sie tun können:

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

EDIT (1): ich im Abschnitt sah man in laufen, und jetzt habe ich ein anderes Problem, ich bin nicht sicher, wie Sie, was urteilen soll ungerade oder nicht, so dass ich vorschlagen, zwei Antworten:

1: ungeradee Schleife 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: ungerade-ID-Nummer:

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

wünschte, ich wäre selbstbewusst genug, um zu versuchen, dies an der richtigen Stelle zu setzen, aber ich bin nicht. Ich habe seit den Loop-Code in den Post, hoffe, dass kann helfen, mir zu zeigen, wo ich das setzen, danke! – Jim

+0

ich muss dort mit einigen leeren Zeilen gezählt haben, suchen Sie nach diesem Kommentarzeile: // alle anderen Beiträge außer dem aktuellen Beitrag es ist diese Schleife. – Jim

+0

Ich verstehe Schritt 2, nur nicht Schritt 1. Nehmen wir an, ich werde alle ersetzen von/* Füllen Sie die Post-Liste Array */zu // Wir haben den aktuellen Beitrag und Link soll angezeigt werden - für Ihren neuen Code, was würde es dann sein? Sorry, ich bin nicht gut mit PHP :( – Jim

34

Die drei Möglichkeiten sind

Modulo

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

boolean Wert

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

    $even = !$even; 
} 

Flipping Und erwähnt Booleschen Operator

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

Die schnellste Booleschen Operator ist. Am robustesten ist jedoch die Flipping-Methode, wenn Sie sehr unterschiedliche Nummern haben (wie ID-Nummern durchlaufen und einige fehlen).

+0

während ich Ich bin sicher, dass das alles funktionieren wird, ich bin kein Programmierer, also um deinen Code in meinem Skript zu bearbeiten, naja, ich bin ahnungslos. Danke aber. – Jim

+0

danke auch hier .. – Peanuts

+0

Danke auch hier =) –

0

Sind Sie sicher, dass $ findpost-> ID fortlaufende Nummern enthält?

Sie könnten die if/else mit s kurze ternäre Anweisung wie folgt ersetzen:

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

Dies würde fügen Sie eine ‚linke‘ Seite zuerst.

2

Wenn Sie jemals einen Artikel löschen, die Sie in Schwierigkeiten sein könnte - Ihr Code geht davon aus, dass ID Läufe (ungerade, gerade, ungerade, gerade) usw.

Eine bessere Idee ein separates Iterator-Objekt zu erstellen wäre zu füttern Sie die notwendigen Werte bei jedem Schritt.Hier ist, was ich benutze:

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; } 
} 

dann die Ausgabe vereinfacht zu

$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

klingt großartig, aber das ist alles zu komplex für jemanden, der nicht (mich) codiert. Es sei denn, ich kann das PHP-Datei-Update von jemandem bekommen und zurückgeschickt, ich werde nie das zum Laufen bringen :( – Jim

+0

Ich habe Ihre Datei unter http://pastebin.com/m2606fee0 für Sie gepatcht - wie Sie sehen können, ist es nur ein Die Frage ist, wie man in die richtigen Stellen schneidet und klebt. "Hope that helps. –

5

Zustand innen Schleife:

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

Dies ist ein sehr süßer Ansatz. – Banago

+0

super sauber Ansatz –

0

Get EvenArray und 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]; 
     } 
    }