繁体   English   中英

在数组中查找非重复元素

[英]Find the Non-Repeating Elements in an Array

我的数组是:

$array= array(4,3,4,3,1,2,1);

我想将其输出如下:

Output = 2 

(因为2仅出现一次)

这是我尝试过的:

$array = array(4, 3, 4, 3, 1, 2, 1);
$array1 = array(4, 3, 4, 3, 1, 2, 1);
$array_diff = array_diff($array, $array1); 

一线无循环:( 演示

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

细目:

array_keys(                          // return the remaining keys from array_count_values 
    array_intersect(                 // filter the first array by second
        array_count_values($array),  // count number of occurrences of each value
        [1]                          // identify the number of occurrences to keep
    )
)

如果您(或任何将来的读者)想要保留更多值,请替换array_intersect()的第二个参数/数组。 例如:您要保留1,2和3: array(1,2,3)[1,2,3]

ps为了便于记录,您可以将array_filter()与自定义函数一起使用,以忽略所有非1计数值,但是我使用了array_intersect()因为语法更简短并且IMO更易于阅读。


ps认为我会重新考虑并加入PHP7.4技术,并与其他基于函数的技术进行比较...

代码:( 演示

$numbers = [4, 3, 4, 3, 1, 2, 1];
var_export(
    array_keys(
        array_intersect(
            array_count_values($numbers),
            [1]
        )
    )
);

echo "\n---\n";
var_export(
    array_keys(
        array_filter(
            array_count_values($numbers),
            function($count) {
                return $count === 1;
            }
        )
    )
);

echo "\n---\n";
// PHP7.4+
var_export(
    array_keys(
        array_filter(
            array_count_values($numbers),
            fn($count) => $count === 1
        )
    )
);

您可以使用array_count_values() php函数。

例如 :

$numbers = [4, 3, 4, 3, 1, 2, 1];

// build count array as key = number and value = count
$counter_numbers = array_count_values($numbers);

print_r($counter_numbers);

输出:

 Array ( [4] => 2 [3] => 2 [1] => 2 [2] => 1 ) 

然后遍历新数组以获取非重复值:

$unique_numbers = [];

foreach ($counter_numbers as $number => $count) {
    if ($count === 1) {
        $unique_numbers[] = $number;
    }
}

print_r($unique_numbers);

输出:

 Array ( [0] => 2 ) 

希望能帮助到你。

您可以这样做:

$array= array(4,3,4,3,1,2,1);
foreach($array as $v)
{
  $arr[$v][] = 1;
}
foreach($arr as $k => $v)
{
  if(count($v) == 1)
    $o[] = $k;
}

print_r($o);

结果:

Array
(
    [0] => 2
)

如果在您的情况下只能使用一个唯一值:

$array= array(4,3,4,3,1,2,1);
$singleValue = array_search(1, array_count_values($array));
var_dump($singleValue) // Outputs: 2

暂无
暂无

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

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