Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
$i--;迭代器陷入无限循环php中_Php_For Loop_Infinite Loop - Fatal编程技术网

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