我有一个数组:
$arr1 = [1,2,2,3,3,3];
是否有任何方法可以删除重复值,例如,
some_function($arr1,3);
给了我输出$arr1 = [1,2,2,3,3]
答案 0 :(得分:2)
这应该有用......
function removeduplicate($myarray,$needle) {
if (($nmatches = count($matches = array_keys($myarray,$needle))) >= 2) {
for ($i=0; $i<$nmatches; $i++) {
if ($matches[$i+1] == (1+$matches[$i])) {
array_splice($myarray,$matches[$i],1);
break;
}
}
}
return $myarray;
}
使用此功能......
$arr1 = [1,2,2,3,3,3,4,7,3,3];
$newarray = removeduplicate($arr1,3)
print_r($newarray);
<强> EDITED 强>:
如果您希望该函数直接修改原始数组,则可以执行此操作(如果删除了某个字符,该函数将返回true
,如果没有,则返回false
)...
function removeduplicate(&$myarray,$needle) {
if (($nmatches = count($matches = array_keys($myarray,$needle))) >= 2) {
for ($i=0; $i<$nmatches; $i++) {
if ($matches[$i+1] == (1+$matches[$i])) {
array_splice($myarray,$matches[$i],1);
return true;
}
}
}
return false;
}
所以,现在你可以做......
$arr1 = [1,2,2,2,2,2,3,3,3,4,2,2];
removeduplicate($arr1,2);
print_r($arr1);
答案 1 :(得分:2)
根据评论,检查您要搜索的元素是否有多个,然后查找并删除其中一个元素。
function remove_one_duplicate( $arr, $target ) {
if( count( array_keys( $arr, $target ) ) > 1 ) {
unset( $arr[array_search( $target, $arr )] );
}
return $arr;
}
答案 2 :(得分:0)
此函数将复制仅跳过指定元素的第二个实例的数组。
function removeOnce($array, $elem) {
$found = 0;
$result = [];
foreach ($array as $x) {
if ($x == $elem && (++$found) == 2) {
continue;
}
$result[] = $x;
}
return $result;
}