在循环中删除重复的数组

时间:2018-02-13 07:33:14

标签: php arrays loops

我有一个可能包含重复项的关联数组。我试图循环数组并将当前元素与数组中的下一个元素进行比较。如果有重复,则应将其删除。

下面的代码删除了该元素的一个实例。在我使用的测试阵列中,我有3个重复的部件号,但我的代码只删除了一个。我和两个人一起离开了。我只希望留下一个。

  $length = count($items);

   for($i = 0; $i < $length -1; $i++){
    if($items[$i]['part_number'] == $items[$i+1]['part_number']){
      unset($items[$i+1]);
      $items = array_values($items);
    }
   }

我在这里做错了什么?

5 个答案:

答案 0 :(得分:1)

您需要在数组中向后循环,并删除当前项目。

$length = count($items);

for($i = $length - 1; $i > 0; $i--){
    if($items[$i]['part_number'] == $items[$i-1]['part_number']){
        unset($items[$i]);
    }
}

答案 1 :(得分:0)

因为你的代码是 $ items值在for语句中。

如果你想要唯一的数组,你必须使用array_unique函数

http://php.net/manual/en/function.array-unique.php

答案 2 :(得分:0)

一个肮脏的黑客是通过减少$i来重复检查是否有重复。

for($i = 0; $i < $length -1; $i++){
    if($items[$i]['part_number'] == $items[$i+1]['part_number']){
        unset($items[$i+1]);
        $items = array_values($items);
        $i--;
    }
}

这样它将再次针对数组中的下一个项目测试您之前的值 那么if 0==1,然后下次if 0==2 您的代码0==1然后(2)==(3)

答案 3 :(得分:0)

在你的unset元素之后的情况下,{for循环中的$i++,你重新编制了数组索引并跳过了一个元素。如果您取消设置项目,请添加$i--。或者,您可以在for循环后重新索引数组。

答案 4 :(得分:0)

这也是一个非常简单的例子,您可以开始改进。

<?php
$test = ['sample', 'sample', 'sample', 'not', 'not', 'no', 'no'];
$test2 = [];

$k = 0;
foreach ($test as $key => $value) {
  if ($key == 0) {
    $test2[$k] = $value;
    $k++;
  } else {
    if ($test2[$k - 1] != $value) {
      $test2[$k] = $value;
      $k++;
    }
  }
}

$test = $test2;

var_dump($test);