我有以下代码从数组
中删除相邻的重复项$myArray = array(
0 => 0,
1 => 0,
2 => 1,
5 => 1,
6 => 2,
7 => 0,
8 => 0,
);
$previtem= NULL;
$newArray = array_filter(
$myArray,
function ($currentItem) use (&$previtem) {
$p = $previtem;
$previtem= $currentItem;
return $currentItem!= $p ;
}
);
echo "<pre>";
print_r($newArray);
问题
必需的输出。
Array
(
[0] => 0
[2] => 1
[6] => 2
[7] => 0
)
实际输出
Array
(
[2] => 1
[6] => 2
[7] => 0
)
如何在不修改代码的情况下获得所需的输出?或者还有其他更好的方法吗?
由于
答案 0 :(得分:3)
问题在于过滤器功能中的loose comparison。当你说
return $currentItem != $p ;
PHP将$p
的初始空值和$currentItem
的0值视为等价,因此第一次迭代会被过滤掉。
如果您更改该行以使用严格比较(===
或!==
),它将按预期工作
return $currentItem !== $p ;
这样可以确保只过滤完全相同的相邻值,包括类型比较。