我知道有array_unique
函数,但我想删除重复项。是否有内置功能或者我必须自己动手。
示例输入:
banna, banna, mango, mango, apple
预期产出:
apple
答案 0 :(得分:13)
您可以结合使用array_unique
,array_diff_assoc
和array_diff
:
array_diff($arr, array_diff_assoc($arr, array_unique($arr)))
答案 1 :(得分:6)
您可以使用
$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
- 返回所有键或数组键的子集答案 2 :(得分:2)
只需编写自己的简单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" }
玩得开心:)
答案 3 :(得分:1)
如果您只想在数组中保留已经唯一的值,而不是选择每个值的一个唯一实例,那么您确实必须自己滚动。内置功能就是清理值集,而不是过滤。
答案 4 :(得分:1)
您想要删除任何具有重复项的条目,这样您只剩下列表中唯一的条目吗? 嗯,这听起来像是你需要自己动手的东西。
答案 5 :(得分:1)
没有现有的功能;您必须在两个过程中执行此操作,一个用于计算唯一值,另一个用于提取唯一值:
$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;
}
答案 6 :(得分:0)
顶部的答案看起来很棒,但是旁注:如果你想要消除重复但是留下第一个,使用array_flip两次将是一个非常简单的方法。 array_flip(array_flip(X))
答案 7 :(得分:0)
仅与此特定问题部分相关 - 但我从Gumbo的多维数组答案中创建了此函数:
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,它提供了它在多维数组的同一部分而不是它的关键
答案 8 :(得分:-1)
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;
}
}