Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:如何一次性删除重复的数组项_Php - Fatal编程技术网

PHP:如何一次性删除重复的数组项

PHP:如何一次性删除重复的数组项,php,Php,我有一个数组: $arr1 = [1,2,2,3,3,3]; 有什么方法可以删除重复的值吗 some_function($arr1,3); 这个函数将复制数组,只跳过指定元素的第二个实例 function removeOnce($array, $elem) { $found = 0; $result = []; foreach ($array as $x) { if ($x == $elem && (++$found) == 2) {

我有一个数组:

$arr1 = [1,2,2,3,3,3];
有什么方法可以删除重复的值吗

some_function($arr1,3);

这个函数将复制数组,只跳过指定元素的第二个实例

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

此函数将复制数组,只跳过指定元素的第二个实例

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

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;
}
已编辑

如果希望函数直接修改原始数组,可以这样做(如果字符已被删除,函数将返回
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);
                break;
            }
        }
    }

    return $myarray;
}
已编辑

如果希望函数直接修改原始数组,可以这样做(如果字符已被删除,函数将返回
true
,如果未删除,函数将返回
false


根据注释,检查您正在搜索的元素是否不止一个,然后查找并删除其中一个

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

    return $arr;
}

根据注释,检查您正在搜索的元素是否不止一个,然后查找并删除其中一个

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

    return $arr;
}

这是一个如此特殊的要求,以至于没有内置的方法。计算数组中的实例数,如果大于1,则查找并删除一个。@JJJ是的,您是对的。但是你能给我提供更多的细节吗?检查下面的答案/这是一个如此特殊的要求,没有内置的方法。计算数组中的实例数,如果大于1,则查找并删除一个。@JJJ是的,您是对的。但是你能给我提供更多的细节吗?检查下面的答案/我认为如果你将第一个
if条件作为while循环,你实际上可以匹配多个重复的数字。我改变了方法。谢谢@Sysix!我认为如果将第一个
if条件作为while循环,实际上可以匹配多个重复的数字。我改变了方法。谢谢@Sysix!对于这个问题,这里有一个轻微的改进(将
array\u search()
替换为
current()
)对于这个问题,这里有一个轻微的改进(将
array\u search()
替换为
current()
),不幸的是,这个方法将进行大量迭代来构建新的数组。更好/更有效的方法是从循环中删除/取消设置一个重复和中断。不幸的是,此方法将进行大量迭代以构建新数组。一个更好/更有效的方法是从循环中删除/取消设置一个副本和中断。