PHP:如何删除重复的数组项ONCE

问题描述:

I have an array:

$arr1 = [1,2,2,3,3,3];

Is there any method by which I can delete a duplicate value once like,

some_function($arr1,3);

which gives me the ouput $arr1 = [1,2,2,3,3]

我有一个数组: p>

  $ arr1 = [1  ,2,2,3,3,3]; 
  code>  pre> 
 
 

是否有任何方法可以删除重复值,例如, p> some_function($ arr1,3); code> pre>

这给了我输出 $ arr1 = [1,2,2] ,3,3] code> p> div>

As per the comment, check if there are more than one of the element you're searching for, then find and remove one of them.

function remove_one_duplicate( $arr, $target ) {
    if( count( array_keys( $arr, $target ) ) > 1 ) {
        unset( $arr[array_search( $target, $arr )] );
    }

    return $arr;
}

This function will copy the array skipping only the second instance of the specified element.

function removeOnce($array, $elem) {
    $found = 0;
    $result = [];
    foreach ($array as $x) {
        if ($x == $elem && (++$found) == 2) {
            continue;
        }
       $result[] = $x;
    }
    return $result;
}

This should work...

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;
}

To use the function...

$arr1 = [1,2,2,3,3,3,4,7,3,3];
$newarray = removeduplicate($arr1,3)
print_r($newarray);

EDITED:

If you want the function to modify your original array directly, you can do it (the function will return true if a character has been removed or false if not)...

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;
}

So, now you can do...

$arr1 = [1,2,2,2,2,2,3,3,3,4,2,2];
removeduplicate($arr1,2);
print_r($arr1);