添加数组项,然后重新计算新数组


Add array item then re-evaluate new array

我已经为这个问题挠头好几个小时了,似乎是一个愚蠢的问题,但就是找不到解决方案。

下面是我的示例代码:
$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;
}
}

输出
红色

白色

蓝色

基本上我是在添加颜色"YELLOW"然后再遍历整个数组。但是它忽略了新添加的数组项。

我知道它确实识别了项目,因为while循环将继续运行,直到$colorsArray有4个项目(开始时只有3个)。

那么为什么它不是Echo "YELLOW"?

我已经尝试了一些不同的解决方案,只是推项目使用$array[],使用foreach, array_values等。

谢谢

更新:

如果我把

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

仍然不打印黄色

我可能马上就会把它清理干净,但是很快就可以了;

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

本质上是在每次迭代时使用count,因为数组的长度改变了,现在它有了另一个元素来循环。

Edit:如果您希望它再次遍历整个数组,只需在您插入新元素后设置$i = -1;

Edit2: A little clean up

$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,那么你将跳过第一个循环迭代,即你错过了红色。
  • 不确定你的数据集/目的,但我想你会希望"黄色"是动态的。