我有点卡在这里,我认为必须有一个相当简单的解决方案。PHP - 如果任何数组值匹配,然后删除所有这些
说我有一个数组:
$A = array(1, 1, 2, 4, 6, 7, 7, 7, 13);
我怎么可能删除所有出现不止一次的价值观?
所以我留下了一个数组,看起来像这样
$A = array(2, 4, 6, 13);
我试着使用数组独一无二的,但只是删除重复让你有一个值。我需要使用以下逻辑:如果有任何匹配的值 - 则删除所有匹配的值。
我有点卡在这里,我认为必须有一个相当简单的解决方案。PHP - 如果任何数组值匹配,然后删除所有这些
说我有一个数组:
$A = array(1, 1, 2, 4, 6, 7, 7, 7, 13);
我怎么可能删除所有出现不止一次的价值观?
所以我留下了一个数组,看起来像这样
$A = array(2, 4, 6, 13);
我试着使用数组独一无二的,但只是删除重复让你有一个值。我需要使用以下逻辑:如果有任何匹配的值 - 则删除所有匹配的值。
你总是可以尝试这样的事情。
$A = array(1, 1, 2, 4, 6, 7, 7, 7, 13);
$A = array_count_values($A);
foreach($A as $key => $value) {
if($value > 1)
unset($A[$key]);
}
$A = array_keys($A);
print_r($A);
编辑:固定错误
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 13
)
简单通常更好,在这种情况下,RichardW11的答案是Amal的array_filter()版本的两倍。 – Dave
你可以用编码的升技做到这一点。
首先看到这个SO发布使用array_unique获得所有副本的列表:
php return only duplicated entries from an array
那么你必须依次通过重复从上面的链接返回,做一个array_search返回值的索引,然后array_splice实际删除它。
我不知道任何代码将在一个步骤中为您执行此操作。
可以使用array_filter()
用自定义回调过滤掉重复数组值不止一次:
function removeDuplicates($array) {
$values = array_count_values($array);
return array_filter($array, function($item) use ($values) {
return $values[$item] === 1;
});
}
用法:
$A = array(1, 1, 2, 4, 6, 7, 7, 7, 13);
print_r(removeDuplicates($A));
输出:
Array
(
[2] => 2
[3] => 4
[4] => 6
[8] => 13
)
尝试这样(PHP> = 5.3):
$A = array_keys(array_filter(
array_count_values($A),
function ($count)
{
return $count == 1;
}
));
说明:
array_count_values使用数组的值作为密钥和它们在阵列值频率返回一个数组。
array_filter迭代数组中的每个值,将数组传递给回调函数(本例中为anonymous function)。如果频率为1,则数组中的当前值将返回到结果数组中。
array_keys返回数组中的键,在这种情况下,频率等于1的值。
因此,压缩“单行”的形式是:
$A=array_keys(array_filter(array_count_values($A),function($c){return $c==1;}));
你一直想? – qwertynl
是的,这正是我要去的,是否有任何内置的PHP函数可以做到这一点? –
供参考:我注意到我的答案下面有一个错字。现在已修好。 – RichardW11