我该如何在PHP中从数组中移除重复的值?
我该如何在PHP中从数组中移除重复的值?
对于一维数组,请使用array_unique()
。来自PHP手册:
接受一个输入数组并返回一个没有重复值的新数组。
请注意,键被保留。如果多个元素在给定标志下相等,则第一个相等元素的键和值将被保留。
请注意,
array_unique()
不适用于多维数组。
示例:
$array = array(1, 2, 2, 3);
$array = array_unique($array); // Array is now (1, 2, 3)
如果您想重新索引值,此外,您应该应用array_values
。
$array = array_unique($array, SORT_REGULAR);
该代码的作用是从数组中移除重复的元素,并保持原有的键值对关系。 - iniravpatel使用 array_values(array_unique($array));
array_unique
: 用于去重数组
array_values
: 用于重新索引
array_unique
返回一个键值对的对象,array_values
则仅返回值组成的数组。 - narainsagararray_unique()
要求第一个参数必须是数组。而array_values()
也要求其参数必须是数组。如果你正在处理一个对象,那么这段代码将会出错。请不要误导研究人员,说些不实之词。 - mickmackusa//Find duplicates
$arr = array(
'unique',
'duplicate',
'distinct',
'justone',
'three3',
'duplicate',
'three3',
'three3',
'onlyone'
);
$unique = array_unique($arr);
$dupes = array_diff_key( $arr, $unique );
// array( 5=>'duplicate', 6=>'three3' 7=>'three3' )
// count duplicates
array_count_values($dupes); // array( 'duplicate'=>1, 'three3'=>2 )
$result = array();
foreach ($array as $key => $value){
if(!in_array($value, $result))
$result[$key]=$value;
}
对我有效的唯一方法是:
$array = array_unique($array, SORT_REGULAR);
编辑: SORT_REGULAR
保持原始数组的顺序。
array_unique()
并不太合适,如果你想要获取独特的且重复的元素...$unique=array("","A1","","A2","","A1","");
$duplicated=array();
foreach($unique as $k=>$v) {
if( ($kt=array_search($v,$unique))!==false and $k!=$kt )
{ unset($unique[$kt]); $duplicated[]=$v; }
}
sort($unique); // optional
sort($duplicated); // optional
结果展示
array ( 0 => '', 1 => 'A1', 2 => 'A2', ) /* $unique */
array ( 0 => '', 1 => '', 2 => '', 3 => 'A1', ) /* $duplicated */
我们可以轻松使用array_unique($array);
来删除数组中的重复元素。
用法
$arr = array_unique($arr);
$arr = array_values($arr);
print_r($arr);
或者
$arr = array_flip($arr);
$arr = array_flip($arr);
$arr = array_values($arr);
print_r($arr);
第一次翻转,将键值对反转,因此组合具有相似键(最初是值)的元素。
第二次翻转以恢复所有键值对。最后array_value()
将每个值与从0开始的键设置。
注意:不适用于具有预定义键值对的关联数组
array_flip()
不适合一般使用,因为即使不相同的值会被合并/丢失,如果它们共同对应于相同的字符串或整数值。此外,自 PHP4.3(也许更早,我不知道)以来,当值不是字符串或整数时,这种解决方案将发出警告。证明在本页上提供了十年前使用 array_unique()
的建议。我不推荐这个答案——它要么给出冗余的建议,要么给出不稳定的建议。 - mickmackusa$a = array(1, 2, 3, 4);
$b = array(1, 6, 5, 2, 9);
$c = array_merge($a, $b);
$unique = array_keys(array_flip($c));
print_r($unique);
array_flip()
不稳定/可靠,不适用于一般用途。尽管值不相同,但会合并/丢失共同转换为相同字符串或整数值的值。此外,自 PHP4.3(可能更早,我不知道)以来,当值不是字符串或整数时,此解决方案将发出警告。证明 我不支持这个答案,因为它不包含任何解释性文本,并且在某些情况下使用不安全。 - mickmackusa$array = array (1,3,4,2,1,7,4,9,7,5,9);
$data=array();
foreach($array as $value ){
$data[$value]= $value;
}
array_keys($data);
OR
array_values($data);
根据数组的大小,我发现
$array = array_values( array_flip( array_flip( $array ) ) );
可以比array_unique更快。
array_flip()
不适合一般使用,因为值会被合并/丢失,即使它们不完全相同但会共同转化为相同的字符串或整数值。此外,自 PHP4.3(也许更早,我不确定)以来,当值不是字符串或整数时,这种解决方案会发出警告。证明 - mickmackusa