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()
),不幸的是,这个方法将进行大量迭代来构建新的数组。更好/更有效的方法是从循环中删除/取消设置一个重复和中断。不幸的是,此方法将进行大量迭代以构建新数组。一个更好/更有效的方法是从循环中删除/取消设置一个副本和中断。