删除数组中连续的重复项

use*_*123 5 php arrays duplicates

我正在研究一个删除数组中重复项的函数。这个函数的问题是,如果连续重复项少于 5 个,它将保留,而上面的 5 个将成为一个数字。

我的问题是无法弄清楚逻辑。

希望你能帮我。

谢谢。

示例代码

function removeDuplicates($array){
        $result = array();
        $lastVal = null;
        $temp_array = array();
        foreach ($array as $key => $value) {
            # code...
            if($value != $firstVal){

                $result[] = $value;   

            }else{

                $temp_array[] = $value;

            }

            $lastVal = $value;

        }

        return $result;

    }
Run Code Online (Sandbox Code Playgroud)

样本

$array = array(1,2,4,1,1,1,1,0,8,7,2,0,0,8,8,8,8,8,8,8,2,4,1,5);
Run Code Online (Sandbox Code Playgroud)

预期结果

[1,2,4,1,1,1,1,0,8,7,2,0,0,8,2,4,1,5]
Run Code Online (Sandbox Code Playgroud)

Mor*_*arm 3

这里:

    <?php

    $array = array(1,2,4,1,1,1,1,0,8,7,2,0,0,8,8,8,8,8,8,8,2,4,1,5);
    $test = removeDuplicates($array);
    echo '<pre>';
    var_dump($test);


function removeDuplicates($array){
    $result = [];
    $count = 1;

    for ($i = 1; $i <= count($array)-1; $i++) {
        if ($array[$i] == $array[$i - 1]) {
            $count++;
        } else {
            if ($count >= 5) {
                array_splice($array, $i-$count, $count-1);
            }
            $count = 1;
        }
    }

    return $array;

}
Run Code Online (Sandbox Code Playgroud)

输出:

array(18) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(4)
  [3]=>
  int(1)
  [4]=>
  int(1)
  [5]=>
  int(1)
  [6]=>
  int(1)
  [7]=>
  int(0)
  [8]=>
  int(8)
  [9]=>
  int(7)
  [10]=>
  int(2)
  [11]=>
  int(0)
  [12]=>
  int(0)
  [13]=>
  int(8)
  [14]=>
  int(2)
  [15]=>
  int(4)
  [16]=>
  int(1)
  [17]=>
  int(5)
}
Run Code Online (Sandbox Code Playgroud)