2016-09-16 3 views
0

これで2,3時間頭を掻き回してしまったことは、愚かな問題のように思えるが解決策が見つからない。配列の項目を追加して新しい配列を再評価する

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

} 

それは基本的に

を出力します

は、ここに私のサンプルコードです私は "黄色"の色を追加しているし、それは再び全体の配列を通過する必要があります。しかし、それは新しく追加された配列項目を無視しています。

$ colorsArrayが4つの項目を持つまで(最初は3つしかない)whileループが実行され続けるため、項目を認識することが分かります。

なぜ、「黄色」をエコーし​​ていないのですか?場合

私はちょうど$配列を使用してアイテムを押し、[]、foreachのを使用して、array_valuesなど、いくつかの異なる解決策を試してみたなど

はあなたに

更新をありがとう私は(カウント($ colorsArray)== 10){

場合

を置きます

まだ印刷されません。イエロー

+1

あなたは特にあなたの '$ continueLoop =偽で追加の繰り返しを防ぐため、あなたは' for'から抜け出すと、その後、 '$ continueLoop =を設定イエローインデックス – arkascha

+1

もで破る...'コマンドすべてが完了し、黄色をエコーするために再びループしません。 – Farhan

+1

を表示しない場合 – AbraCadaver

答えて

1

これはおそらく一瞬ですっきりしていますが、すぐにこれがうまくいくはずです。

基本的に、配列の長さが変わるので、各繰り返しでcountを使用します。ループする別の要素があります。

編集:あなたはそれが再び全体配列をウォークスルーする場合は、新しい要素にプッシュした後、ちょうど$i = -1;を設定します。

Edit2:少しクリーンアップ。

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

出力:

Evaluating: red 
Evaluating: white 
Evaluating: blue 
Evaluating: red 
Evaluating: white 
Evaluating: blue 
Evaluating: Yellow 
  • あなたは0ではなく-1に戦利品をリセットすると、あなたは、すなわちあなたが赤を逃し、最初のループ反復をスキップします。
  • これはあなたのデータセット/目的にはわかりませんが、私はあなたが '黄色'を動的にしたいと思っていると思います。
+0

こんにちはピジョン、あなたがこれに取り組むことを感謝します。事は私がそこに休憩声明が必要だということです。これははるかに大きなスクリプトの一部です。私はあなたのスクリプトを実行すると動作しますが、内部のブレークステートメントでは動作しません。 –

+0

nmそれは暗い質問だった、もちろんそれは黄色を表示しません。なぜなら、それが "青"に達したときにループから壊れてしまうからです。 –

関連する問題