从数组中移除连续重复出现的元素

4

有没有办法从下面的数组中删除连续重复的元素,只保留第一个元素?

数组如下所示:

$a=array("1"=>"go","2"=>"stop","3"=>"stop","4"=>"stop","5"=>"stop","6"=>"go","7"=>"go","8"=>"stop");

我希望拥有一个包含以下内容的数组:

$a=array("1"=>"go","2"=>"stop","3"=>"go","7"=>"stop");

为什么 "3"=>"go",你是怎么得到这个结果的? - user1646111
会不会是 ..."3"=>"go","4"=>"stop" 而不是 "3"=>"go","7"=>"stop") - Sean
是的,Sean,抱歉应该是“4”=>“停止”。 - Abbasi
有没有考虑一开始就不把重复项放入数组中? - calcinai
2个回答

9

连续重复?我不知道有没有原生函数可以做到,但这个函数可以用。准确说,差不多可以用。我可能理解错了。在我的函数中,7 => "go" 是6 => "go" 的重复项,而8 => "stop" 是新值...?

function filterSuccessiveDuplicates($array)
{
    $result = array();

    $lastValue = null;
    foreach ($array as $key => $value) {
        // Only add non-duplicate successive values
        if ($value !== $lastValue) {
            $result[$key] = $value;
        }

        $lastValue = $value;
    }

    return $result;
}

1
你可以直接这样做:

if(current($a) !== $new_val)
    $a[] = $new_val;

假设您在操作该数组之间,您可以使用current(),它比每次计算并检查count($a)-1的值更有效。

你能进一步阐述一下 $new_val 吗?它会从哪里来? - Abbasi
$new_val 将是您要添加的值,例如“stop”或“go”。 - calcinai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接