我知道有array_unique
函数,但我想删除重复项。有没有内置功能,还是必须自己推出?如何从阵列中删除所有重复值的实例
示例输入:
banna, banna, mango, mango, apple
预期输出:
apple
我知道有array_unique
函数,但我想删除重复项。有没有内置功能,还是必须自己推出?如何从阵列中删除所有重复值的实例
示例输入:
banna, banna, mango, mango, apple
预期输出:
apple
您可以使用array_unique
,array_diff_assoc
和array_diff
组合:
array_diff($arr, array_diff_assoc($arr, array_unique($arr)))
可以使用
$singleOccurences = array_keys(
array_filter(
array_count_values(
array('banana', 'mango', 'banana', 'mango', 'apple')
),
function($val) {
return $val === 1;
}
)
)
参见
array_count_values
- 计数阵列array_filter
的所有值 - 返回所有键或数组array_keys
滤光器阵列的元件PHP.net http://php.net/manual/en/function.array-unique.php
array array_unique (array $array [, int $sort_flags = SORT_STRING ])
获取输入数组并返回一个没有重复值的新数组。
新的解决方案:
function remove_dupes(array $array){
$ret_array = array();
foreach($array as $key => $val){
if(count(array_keys($val) > 1){
continue;
} else {
$ret_array[$key] = $val;
}
}
如果你想只留下那些已经独一无二的,而不是选择每个价值的唯一实例数组中的值,你的确要滚你自己。内置的功能只是为了清理值集,而不是过滤。
您想删除所有具有重复项的条目,以便只留下列表中唯一的条目吗?嗯,它听起来像你需要推出自己的东西。
没有现有的功能;你必须为此在两个通道,一个计算的独特价值和一个提取唯一值:
$count = array();
foreach ($values as $value) {
if (array_key_exists($value, $count))
++$count[$value];
else
$count[$value] = 1;
}
$unique = array();
foreach ($count as $value => $count) {
if ($count == 1)
$unique[] = $value;
}
只写自己的简单的foreach循环:
$used = array();
$array = array("banna","banna","mango","mango","apple");
foreach($array as $arrayKey => $arrayValue){
if(isset($used[$arrayValue])){
unset($array[$used[$arrayValue]]);
unset($array[$arrayKey]);
}
$used[$arrayValue] = $arrayKey;
}
var_dump($array); // array(1) { [4]=> string(5) "apple" }
生活的乐趣: )
上面的答案看起来不错,但是一个方面说明:如果您想要消除重复但保留第一个,使用array_flip两次将是一个非常简单的方法。array_flip(array_flip(X))
你有'array_unique' – 2010-10-23 15:23:04
只有部分相关与这个特定的问题 - 但是我创造了从甘博的回答对多维数组这样的功能:
function get_default($array)
{
$default = array_column($array, 'default', 'id');
$array = array_diff($default, array_diff_assoc($default, array_unique($default)));
return key($array);
}
在这个例子中,我已经缓存的状态和每一个除了默认值是0(默认值是1)。我从ID中索引default
数组,然后将它变成一个字符串。所以要清楚 - 这是返回的结果是默认状态的ID,它提供了在多维数组的相同部分,而不是它的关键
什么是一个奇怪的简单的解决方案。 – 2010-10-14 14:00:03
请注意,虽然这可能是一个简明的解决方案,但在最坏的情况下(O(n·log n)平均情况下),所有函数都在内部使用Quicksort,它在O(n²)中。所以在最坏的情况下,总的复杂度在O(n 2)中。 – Gumbo 2010-10-15 06:02:46