2016-09-16 1 views
0

Habe mich ein paar Stunden an diesem Kopf kratzt, scheint ein albernes Problem, aber kann einfach keine Lösung finden.Array-Element hinzufügen und dann neues Array neu bewerten

Hier ist mein Beispielcode:

$continueLoop = true; 
$colorsArray = array("red", "white", "blue"); 

while($continueLoop == true) { 

$arrayCount = count($colorsArray); 

for ($i=0; $i < $arrayCount; $i++) { 
    echo "evaluating ".$colorsArray[$i]."<br>"; 
    if($colorsArray[$i] == "blue") { 
     array_push($colorsArray, "YELLOW"); 
     break; 
    } 
} 

if(count($colorsArray) == 4) { 
    $continueLoop = false; 
} 

} 

Es gibt

rot

weiß

blau

Grundsätzlich Ich füge eine Farbe "GELB" hinzu und dann sollte es wieder durch das ganze Array gehen. Aber es ignoriert das neu hinzugefügte Array-Element.

Ich weiß, dass es das Element erkennt, weil die while-Schleife weiterläuft, bis $ colorsArray 4 Elemente hat (am Anfang hat es nur 3).

Also warum ist Echo'ing nicht "GELB"?

Ich habe ein paar verschiedene Lösungen versucht, nur das Element drückt mit $ array [] unter Verwendung von foreach, array_values ​​etc. etc.

Danke

Update:

Wenn ich setzte

if (count ($ colorsArray) == 10) {

noch immer noch nicht Gelb drucken

+1

Sie verhindern insbesondere die weitere Iteration mit '$ ContinueLoop = false;' Befehl ... – arkascha

+1

auch brechen, wenn sich nicht gelb-Index zeigen – Farhan

+1

Sie brechen aus dem 'for' und stellen Sie dann' $ ContinueLoop = false ", also ist alles erledigt und es wird nicht mehr wiederholt, um gelb zu leuchten. – AbraCadaver

Antwort

1

wahrscheinlich diese reinigen Wird in einem Moment, aber nur schnell sollte dies die Arbeit erledigen;

$colorsArray = array("red", "white", "blue"); 

for ($i=0; $i < count($colorsArray); $i++) { 
    echo "evaluating ".$colorsArray[$i]."<br>"; 
    if($colorsArray[$i] == "blue" && !in_array('YELLOW', $colorsArray)) { 
     array_push($colorsArray, "YELLOW"); 
    } 
} 

print_r($colorsArray); 

Im wesentlichen verwenden Sie zählen jeder Iteration, da die Länge der Anordnung ändert, ist es nun ein weiteres Element zu durchlaufen hat.

Edit: Wenn Sie es wieder durch das ganze Array gehen möchten, setzen Sie nur $i = -1;, nachdem Sie in einem neuen Element schieben.

Edit2: Ein wenig aufräumen.

$colours = array('red', 'white', 'blue'); 

for ($i = 0; $i < count($colours); ++$i) { 
    echo 'Evaluating: ' . $colours[$i] . '<br/>'; 

    if ($colours[$i] === 'blue' && !in_array('Yellow', $colours)) { 
     array_push($colours, 'Yellow'); 
     $i = -1; 
    } 
} 

Ausgang:

Evaluating: red 
Evaluating: white 
Evaluating: blue 
Evaluating: red 
Evaluating: white 
Evaluating: blue 
Evaluating: Yellow 
  • Wenn Sie die Beute 0 zurückgesetzt anstatt -1 dann überspringen Sie die erste Schleife Iteration, das heißt Sie rot verpassen.
  • Nicht sicher auf Ihrem Datensatz/Zweck für diese, aber ich stelle mir vor, Sie würden wollen, dass "Gelb" dynamisch ist.
+0

Hallo Taube, schätzen Sie die Mühe, die Sie in diese setzen. Die Sache ist, dass ich Break-Statements brauche. Es ist Teil eines viel größeren Drehbuchs. Wenn ich dein Skript ausführe funktioniert es, aber es funktioniert nicht mit break-Anweisungen innerhalb. –

+0

nm es war eine dumme Frage, natürlich wird es nicht gelb zeigen, weil es jedes Mal aus der Schleife ausbricht, wenn es "blau" erreicht .. selbst wenn ich 1000 Gelb darin hinzufügen würde, würde es sie nie zeigen. –

Verwandte Themen