我正在寻找创建一个检查数组是否有重复元素的函数,并且仅当duplicate元素与前一个元素相同时才删除这些元素。让我举个简单的例子:
以下数组(在本例中,数组不是多维的)如下:
array('apple', 'apple', 'pear', 'orange', 'banana', 'apple', 'banana');
在这种情况下,删除重复数组函数将返回一个包含以下元素的数组:
array('apple', 'pear', 'orange', 'banana', 'apple', 'banana');
请注意,数组中仍然存在“重复”。在这种情况下,第一个和第二个元素是重复的(两个都是“苹果”),一个在另一个之前。也就是说,在第一个数组中发现了三个“apple”,但只删除了一个(在这种情况下,第二个元素),因为它是数组中前一个元素的副本。遵循这些规则,虽然有“香蕉”的重复,因为它不是前一个数组元素的副本,它不会被删除。关于这个好功能的任何想法?
答案 0 :(得分:3)
使用以下代码PHP提供函数array_unique删除重复项。
$arraywithdups = array('apple', 'apple', 'pear', 'orange', 'banana', 'apple', 'banana');
$arraywithoutdups = array_unique($arraywithdups);
http://sandbox.onlinephpfunctions.com/code/d8a77d1b60b81ff657c002fa1683ed24c73d321a
答案 1 :(得分: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;
}
答案 2 :(得分: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 )
答案 3 :(得分: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);