从数组PHP中删除相邻的重复项会忽略值为0的第一个元素

时间:2018-06-12 09:44:44

标签: php arrays

我有以下代码从数组

中删除相邻的重复项
$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
)

如何在不修改代码的情况下获得所需的输出?或者还有其他更好的方法吗?

由于

1 个答案:

答案 0 :(得分:3)

问题在于过滤器功能中的loose comparison。当你说

return $currentItem != $p ;

PHP将$p的初始空值和$currentItem的0值视为等价,因此第一次迭代会被过滤掉。

如果您更改该行以使用严格比较(===!==),它将按预期工作

return $currentItem !== $p ;

这样可以确保只过滤完全相同的相邻值,包括类型比较。

请参阅https://eval.in/1019471