我已经为这个问题挠头好几个小时了,似乎是一个愚蠢的问题,但就是找不到解决方案。
下面是我的示例代码:$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
,那么你将跳过第一个循环迭代,即你错过了红色。