我有一个可能包含重复项的关联数组。我试图循环数组并将当前元素与数组中的下一个元素进行比较。如果有重复,则应将其删除。
下面的代码删除了该元素的一个实例。在我使用的测试阵列中,我有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);
}
}
我在这里做错了什么?
答案 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函数
答案 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);