我知道有
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
— 返回数组中部分或所有的键名只需编写简单的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" }
祝你玩得愉快 :)
foreach
期间以那种方式更改数组的大小,但它似乎有效。 - user229044foreach
循环之前没有声明 $used = array()
呢? - Kendall Hopkins目前不存在该函数,您需要通过两次操作来完成,一次用于计算唯一值的数量,另一次用于提取唯一值:
$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;
}
如果你只想保留数组中已经唯一的值,而不是选择每个值的唯一实例,那么你确实需要自己编写代码。内置功能只是用来清理值集,而不是过滤。
这个函数与特定问题只有部分相关 - 但我从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);
}
default
数组,然后将其转换为字符串。因此,明确一点 - 如果返回的结果与多维数组的同一部分中的默认状态的ID相同且不是其键,则返回的结果是默认状态的ID。上面的答案看起来很棒,但是顺便说一下:如果你想消除重复项但保留第一个,使用两次array_flip将是一种非常简单的方法。array_flip(array_flip(x))
PHP.net http://php.net/manual/zh/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;
}
}
array_unique
不起作用。 - user229044
preg_replace('〜(\ b [^,]+),?(\ 1,?)+〜','',$ string);
https://regex101.com/r/ChL2HI/1/ - mickmackusa