[英]Remove Array Elements Without Array_Unique
尝试在不使用array_unique的情况下删除重复的数组元素。 我正在尝试使用array_flip方法,但这似乎对我不起作用。 到目前为止,我的代码是:
$arr = array(
'a' => "one",
'b' => "two",
'c' => "three",
'd' => "two",
'e' => "four",
'f' => "five",
'g' => "three",
'h' => "two"
);
function removeDuplicates($arr) {
$arr = array_flip($arr);
$arr = array_flip($arr);
}
print_r(removeDuplicates($arr));
我最终想要得到的输出是:
[a] => one
[e] => four
[f] => five
这纯粹是出于教育目的,因为我正在尝试寻找不同的方法。 任何帮助都非常感谢。
另一个解决方案是:
$counts = array_count_values($arr);
foreach ($arr as $key => $value) {
if ($counts[$value] > 1) {
unset($arr[$key]);
}
}
另外,array_unique确保没有重复的值,而您希望数组中没有重复的值。 那是完全不同的,我猜想删除对array_unique函数的提及将使这个问题变得不那么混乱。
array_flip将确保您没有任何重复项,但不会为您提供唯一的值。
您正在寻找的输出
[a] => one
[e] => four
[f] => five
是唯一的值。 您可能会得到的数组是
[a] => one
[b] => two
[c] => three
[e] => four
[f] => five
对于您的输出,您需要执行以下操作
function array_real_unique($arr, $strict = FALSE) {
$unique = array();
$dupes = array();
foreach ($arr as $key => $value) {
if (($index = array_search($value, $dupes, $strict)) === FALSE)
$unique[$key] = $value;
else
unset($unique[$index]);
$dupes[$key] = $value;
}
return $unique;
}
如果添加了return $arr;
在您的代码中,其作用与array_unique
相同。 好吧,差不多。 array_unique
将保留一个元素的第一个实例,而您的将保留最后一个。
您的示例显示您要删除具有重复项而不是重复项的元素。 为此,您需要获取重复条目的列表,然后删除这些值。
更新: array_filter
出array_filter
,这应该适合您的情况。
// This only works in PHP 5.3+
$arr = array_filter($arr, function($a) use($arr){
// remove the element if it exists more than once
return count(array_keys($arr, $a)) === 1; // Get the keys for a value
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.