繁体   English   中英

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

[英]How to remove values from an array if occurring more than one time?

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

例如:

$value = array(10,10,5,8);

我需要这个结果:

$value = array(5,8);

php 有内置函数吗?

我试过这个,但这不会返回我的预期结果:

$unique = array_unique($value);
$dupes = array_diff_key($value, $unique);

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

这是一个单行:

代码:

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

作为多行:

var_export(
    array_keys(
        array_intersect(
            array_count_values($value),
            [1]
        )
    )
);

输出:

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

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

上面的代码片段与@modsfabio 和@axiac 的答案相同。 我的代码片段的唯一优势是简洁。 他们的解决方案可能会胜过我的解决方案,但在相对较小的数据集上判断速度可能会浪费开发时间。 对于处理相对较大数据集的任何人,请进行自己的基准测试以找到最有效的技术。

您可以使用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

一种可能的方法:

$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()产生所需的结果。

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

您需要使用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>';
?>

演示

您可以使用 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]=>8)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM