PHP根据以前的元素删除数组重复项

问题描述 投票:0回答:4

我正在寻找创建一个检查数组是否有重复元素的函数,并且仅当duplicate元素与前一个元素相同时才删除这些元素。我举个简单的例子:

以下数组(在本例中,数组不是多维的)如下:

array('apple', 'apple', 'pear', 'orange', 'banana', 'apple', 'banana');

在这种情况下,删除重复数组函数将返回一个包含以下元素的数组:

array('apple', 'pear', 'orange', 'banana', 'apple', 'banana');

请注意,数组中仍然存在“重复”。在这种情况下,第一个和第二个元素是重复的(两个都是“苹果”),一个在另一个之前。也就是说,在第一个数组中发现了三个“apple”,但只删除了一个(在这种情况下,第二个元素),因为它是数组中前一个元素的副本。遵循这些规则,虽然有“香蕉”的重复,因为它不是前一个数组元素的副本,它不会被删除。关于这个好功能的任何想法?

php arrays
4个回答
2
投票

也许这样的事情:

function remove_adjacent_dups($arr) {
  $prev = null;
  $result = array();
  foreach( $arr as $val ) {
    if( $val !== $prev ) array_push($result, $val);
    $prev = $val;
  }
  return $result;
}

3
投票

使用以下代码PHP提供函数array_unique来删除重复项。

$arraywithdups = array('apple', 'apple', 'pear', 'orange', 'banana', 'apple', 'banana');
$arraywithoutdups = array_unique($arraywithdups);

http://sandbox.onlinephpfunctions.com/code/d8a77d1b60b81ff657c002fa1683ed24c73d321a


0
投票

这是一个版本,取决于你想用键做什么。

$array = array('apple', 'apple', 'apple', 'apple', 'pear', 'orange', 'banana', 'apple', 'banana');
for ($i = 0; $i < count($array); $i++) {
    if ($array[$i] == $array[$i+1]) {
        unset($array[$i]);
    }
}
print_r($array);
//Array ( [3] => apple [4] => pear [5] => orange [6] => banana [7] => apple [8] => banana ) 

0
投票

你可以试试这个:

function removeDuplicates($dupeArray)
{
    $prevElement = NULL;

    foreach($dupeArray as $index => $element)
    {
        if ($prevElement && $prevElement == $element)
        {
            array_splice($dupeArray, $index, 1);
        }
        $prevElement = $element;
    }

    return $dupeArray;
}

$dupeArray = array('apple', 'apple', 'pear', 'orange', 'banana', 'apple', 'banana');
$newArray = removeDuplicates($dupeArray);

var_dump($newArray);
© www.soinside.com 2019 - 2024. All rights reserved.