[英]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.