3 Stimmen

Ist meine Modulus-Logik für diese Schleife korrekt?

Also hier ist das Muster, nach dem ich suche

Aus einer endlichen Menge möchte ich die ersten 2 Werte für eine Menge abrufen, dann die nächsten 4 für eine andere Menge, dann 2 für die erste Menge und dann 4 für die andere Menge und so weiter...

greife 2 | greife 4 | greife 2 | greife 4 ...

$count = 0;
foreach ($listing as $entry){
  if ($count % 4 == 0){
       // zu 4er-Set hinzufügen
  } else if ($count % 2 == 0){
       // zu 2er-Set hinzufügen
  }
  $count++;
}

Meine Verwirrung besteht darin, dass wenn $count % 4 = 0 dann auch $count % 2 = 0 ist.

Sollte ich also sicherstellen, dass ich nicht den falschen Modulus-Fall erreiche (da beide wahr sind für eine beliebige Zahl, die durch 4 teilbar ist), indem ich zuerst überprüfe, ob $count % 4 == 0 ist?

1voto

ariel Punkte 14427

Nicht korrekt

Sie sollten setzen 1 holen, wenn die Anzahl 2, 8, 14 usw. beträgt

Aktuell holen Sie, wenn die Anzahl 2, 4, 8 usw. beträgt

Und setzen 2, wenn die Anzahl 6, 12, 18 usw. beträgt

Derzeit geschieht dies, wenn die Anzahl 4, 8, 12 usw. beträgt

Also ist Bedingung 1 ((Anzahl-2) % 6) == 0

Und Bedingung 2 ist (Anzahl != 0) && (Anzahl % 6) == 0

Hier ist etwas, das funktionieren sollte

$Anzahl = 0;
foreach ($Eintrag as $Eingang){
  if ($Anzahl < 2){
       // zu 2er-Set hinzufügen
  } else {
       // zu 4er-Set hinzufügen
  }

  if ($Anzahl < 6) $Anzahl++; 
  else $Anzahl = 0;
}

Oder wenn Sie 2/4 Elemente auf einmal holen möchten:

$Anzahl = 0;
foreach ($Eintrag as $Eingang){
  if ($Anzahl == 2){
       // 2 Elemente zum 2er-Set hinzufügen
  } elseif ($Anzahl == 6) {
       // 4 Elemente zum 4er-Set hinzufügen
  }

  if ($Anzahl < 6) $Anzahl++; 
  else $Anzahl = 0;
}

1voto

mario Punkte 141130

Wenn ich es richtig verstanden habe, ist Ihre gewünschte Verteilung tatsächlich:

A A, B B B B, A A, B B B B, A A, B B B B, ...

Sie möchten sie also in Gruppen von sechs aufteilen und dann die ersten beiden in Korb A packen und die anderen vier in B:

if ($count % 6 < 2){
   // zum 2-Elemente-Set hinzufügen
}
elseif ($count % 6 < 6){
   // zum 4-Elemente-Set hinzufügen
}

Die Aufteilung in if/elseif stellt sicher, dass die Elemente nur in einem der Sets landen. Der Vergleich < n auf der % 6 Verteilung würde bedeuten:

$count % 6 =    0  1  2  3  4  5  0
        if =   <2 <2 <6 <6 <6 <6 <2
    Korb =    A  A  B  B  B  B  A

0voto

Varun Madiath Punkte 3052

Dies würde aus dem genauen Grund, den Sie angegeben haben, nicht funktionieren.

Möglichkeiten, wie dies funktionieren könnte, sind:

  1. Verwenden Sie ein Modulo von 6 und fügen Sie jedes Mal, wenn sein Modul von 6 ist, die ersten zwei Elemente von count - 6 zu Set1 und die nächsten 4 zu Set2 hinzu.
  2. Verwenden Sie einen booleschen Schalter, fügen Sie die Elemente hinzu, wenn der Schalter auf true steht, nach 4 Elementen setzen Sie den Schalter auf false, und wenn der Schalter auf false steht, fügen Sie die Elemente zu Set2 hinzu und ändern den Wert des Schalters, wenn Sie fertig sind, Elemente zu Set2 hinzuzufügen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X