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