添加数组项,然后重新评估新数组

时间:2016-09-16 14:34:14

标签: php arrays

这个问题一直困扰我几个小时,看起来像是一个愚蠢的问题,但却无法找到解决方案。

这是我的示例代码:

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

}

输出

  

红色

     

白色

     

蓝色

基本上我正在添加一种颜色&#34; YELLOW&#34;然后它应该再次遍历整个阵列。但它忽略了新添加的数组项。

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

那为什么不是Echo&#34; YELLOW&#34;?

我尝试过几种不同的解决方案,只需使用$ array []推送项目,使用foreach,array_values等等。

谢谢

更新

如果我把

  

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

仍然无法打印黄色

1 个答案:

答案 0 :(得分:1)

可能会在一瞬间清理它,但很快就会完成这项工作;

$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,因为数组的长度发生了变化,现在它有另一个要循环的元素。

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

编辑2:稍微清理一下。

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