如果多次出现,如何从数组中删除值?

时间:2017-06-20 13:02:43

标签: php arrays duplicates filtering

我需要从数组中多次出现的数组中删除值。

例如:

$value = array(5,8);

我需要这个结果:

function add<T extends ?>(v1: T, v2: T): T {
    return v1 + v2;
}

php中是否有内置函数?

6 个答案:

答案 0 :(得分:4)

如果您愿意,可以使用数组函数并抛弃foreach循环:

这是一个单行:

代码:

$value=[10,10,5,8];
var_export(array_keys(array_intersect(array_count_values($value),[1])));

输出:

array (
  0 => 5,
  1 => 8,
)

这将值计为数组,然后使用array_intersect()仅保留出现一次的值,然后将键转换为零索引数组的值。

答案 1 :(得分:3)

您可以使用array_count_values()foreach循环执行此操作:

<?php

$input = array(10,10,5,8);
$output = array();

foreach(array_count_values($input) as $value => $count)
{
    if($count == 1)
    {
        $output[] = $value;
    }
}

var_dump($output);

输出:

array(2) {
  [0]=>
  int(5)
  [1]=>
  int(8)
}

示例:https://eval.in/819461

答案 2 :(得分:2)

我会使用array_count_values来获取数组中每个元素出现频率的数组。然后从原始数组中删除多次出现的所有元素。

答案 3 :(得分:1)

可能的方法:

$value = array(10,10,5,8);
$output = array_keys(
    array_filter(
        array_count_values($value),
        function ($count) {
            return $count == 1;
        }
    )
)

array_count_values()生成一个数组,该数组与$value中每个唯一值相关联,显示在数组中的次数。

array_filter()仅在此结果中保留仅在原始数组中出现一次的条目(键)。

array_keys()会产生所需的结果。

答案 4 :(得分:1)

您需要使用array_count_values()array_search()unset()函数。

<?php
$value = array(10,10,5,8);
echo '<pre>';print_r($value);echo '</pre>';
$cnt = array_count_values($value);
$dup = array();
foreach ($cnt as $k => $repeated) {
    if ($repeated > 1) {
        if(($key = array_search($k, $value)) !== false) {
            unset($value[$key]);
        }
    }
}
echo '<pre>';print_r($cnt);echo '</pre>';
echo '<pre>';print_r($value);echo '</pre>';
?>

Demo

答案 5 :(得分:0)

你可以用     foreach循环 和     array_diff()函数:

$value=array(10,10,5,8);
$duplicated=array();
foreach($value as $k=>$v)
{
if($kt=array_search($v,$value))!==false and 
$k!=$kt)
{if (count(array_keys($array, $value)) > 1) 
{
 /* Execute code */
}
unset($value[$kt];$duplicated[]=$v;
}
}

$result=array_diff($values,$duplicated);
print_r($result);

输出

阵列([2] =→5 [3] =&GT; 8)