这个问题一直困扰我几个小时,看起来像是一个愚蠢的问题,但却无法找到解决方案。
这是我的示例代码:
$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){
仍然无法打印黄色
答案 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
,那么您会跳过第一次循环迭代,即您错过了红色。