【问题标题】:Removing successive duplicate occurrences in an array删除数组中连续出现的重复项
【发布时间】:2013-07-16 17:22:43
【问题描述】:

有什么方法可以从下面的数组中删除连续的重复项,而只保留第一个?

数组如下图:

$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" 你是怎么得到的?
  • ..."3"=>"go","4"=>"stop" 而不是"3"=>"go","7"=>"stop")
  • 是的,很抱歉,应该是 "4"=>"stop"
  • 一开始就不能考虑不把重复的放在数组里吗?

标签: php arrays duplicates


【解决方案1】:

连续重复?我不知道本机功能,但这一个有效。差不多吧。以为我理解错了。在我的函数中,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;
}

【讨论】:

    【解决方案2】:

    你可以这样做:

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

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

    【讨论】:

    • 您能否进一步详细说明 $new_val 的来源?
    • $new_val 将是您要添加的值,例如。 “停”或“走”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多