$i--;迭代器陷入无限循环php中
我使用基本的$i--;迭代器陷入无限循环php中,php,for-loop,infinite-loop,Php,For Loop,Infinite Loop,我使用基本的for循环和递增迭代器来检查重复项: $array = ['a', 'b', 'c', 'c', 'c', 'd']; for ($i = 0; $i < $length-1; $i++) { if ($array[$i] == $array[$i + 1]) { //delete $array[$i + 1] $i--; } } $array=['a','b','c','c','c','d']; 对于($i=0;$i
for
循环和递增迭代器来检查重复项:
$array = ['a', 'b', 'c', 'c', 'c', 'd'];
for ($i = 0; $i < $length-1; $i++) {
if ($array[$i] == $array[$i + 1]) {
//delete $array[$i + 1]
$i--;
}
}
$array=['a','b','c','c','c','d'];
对于($i=0;$i<$length-1;$i++){
如果($array[$i]==$array[$i+1]){
//删除$array[$i+1]
$i--;
}
}
我想将所有元素与数组中的下一个元素进行比较。如果存在重复项,我有一个helper函数来删除它,但是我想将
$I
重置回一个,以便使用$I--将其与删除的元素后的下一个元素再次进行比较代码>。然而,当我这样做时,我陷入了一个无限循环。有人知道如何解决这个问题吗 在递增$i之后,您将递减它,因此它将始终在0
和1
之间切换
PHP中有一个函数用于您尝试执行的操作:
如果$i
为0,您添加1++
,然后减去1--
,那么$i
是什么?它会被卡住,因为的增加了1,而您的$i--代码>将其减少1。所以它从来没有增加过。它在每次迭代中都这样做,而不仅仅是在数组匹配的地方。对不起!我的意思是它在for
循环中-将立即更新。感谢您这么快回复我!我不想使用array_unique(),因为我需要实际删除用户(使用helper函数)。是否要将计数器设置回1,这样当计数器增加时,它将与删除前位于同一记录上?因此,如果我在[1]上,比较[1]和[2],然后删除[2]。然后我想将[1]与[3]进行比较。您必须为其嵌套两个语句。将$array[$i]存储到一个var中,使用另一个for
通过另一个计数器(例如$j)遍历相同的数组计数索引,并比较每个循环($var==$array[$j]?delete($array[$j])更容易的方法是存储您看到的最后一个未删除的值,并在进一步迭代时与之进行比较。因此,您将其作为第一个值,例如在$last
中,用第二个值($i=1
)开始循环,并且未被删除的每个值都应覆盖$last
($last=$array[$i]
)。我试着在答案中添加类似的内容,笨蛋-非常感谢你的帮助!不幸的是,这仍然不起作用,不能回到[1]。Aedix-我不知道你是什么意思,你可以分享代码作为例子吗?@chloealee抱歉,我只有几分钟的时间,我被你的代码弄糊涂了。现在它可以工作了,应该可以产生预期的输出。
$array = ['a', 'b', 'c', 'c', 'c', 'd'];
$last = $array[0];
for ($i = 1; $i < count($array); $i++) {
if ($array[$i]==$last) {
unset($array[$i]); // delete element
}
else $last = $array[$i]; // remember value
}
var_dump($array);
array(4) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" [5]=> string(1) "d" }