检查数组中的重复条目,但仅返回重复的值 [重复]
Posted
技术标签:
【中文标题】检查数组中的重复条目,但仅返回重复的值 [重复]【英文标题】:Check for duplicate entries in array but ONLY return values that are duplicated [duplicate] 【发布时间】:2019-04-04 14:40:50 【问题描述】:我正在尝试在数组中搜索重复记录... 很简单....
但是我只希望它返回重复的值.. 我不希望它用计数显示整个数组值(有超过 4 亿个条目)
这是我尝试过的代码(它可以打印所有值,但不是我想要的)
$query = mysqli_query($dbc, "SELECT * FROM `barcodes`");
while ($row = mysqli_fetch_row($query))
$result_array[] = $row[16];
print_r(array_count_values($result_array));
如果有人可以帮助我,我将不胜感激,因为我已经搜索了 google 和 SO 一个多小时,但没有找到我想要的东西
数组打印样本
[502185864797] => 1
[502185864798] => 1
[502185864799] => 1
[502185864800] => 1
[502185864801] => 2
[502185864802] => 2
[502185864803] => 2
[502185864804] => 2
[502185864805] => 2
[502185864806] => 2
我只希望显示计数 > 1 的值
【问题讨论】:
数组长什么样?给我们一个简单的 【参考方案1】:我猜array_unique
会做你的工作。它是 php 的内置函数,可从数组中删除所有重复值。
如果您打算只使用重复值,那么您可以使用另一个内置函数array_diff
同时使用这两个数组。
【讨论】:
这没有回答问题。 OP 想要一份所有受骗者的列表,而不是唯一的列表。 好吧,我刚刚编辑了答案。 @Andreas 请再检查一遍【参考方案2】:使用 array_count_values 获取每个值的计数。 然后使用 array_diff 过滤掉所有唯一值。 Array_keys 获取 array_count_values 放在键中的值。
$counts = array_count_values($arr);
$dupes = array_keys(array_diff($counts, [1]));
看到数组后编辑:
$dupes = array_keys(array_diff($arr, [1]));
这就是你所需要的。该数组已经显示了值(键)的计数。
【讨论】:
【参考方案3】:根据您想要显示的内容(例如,这只是给出一行的 ID),最好在 SQL 中尝试...
SELECT ID
FROM `barcodes`
GROUP BY ID
HAVING count(ID)>1
这个想法是只检索计数值大于一的 ID。
所以这看起来像......
$query = mysqli_query($dbc, "SELECT barcode
FROM `barcodes`
GROUP BY barcode
HAVING count(barcode)>1");
$result_array = mysqli_fetch_all($query, MYSQLI_ASSOC);
print_r($result_array);
如果你想知道它存在的次数,只需将计数添加到 SELECT 列表中......
SELECT ID, count(ID) times
FROM `barcodes`
GROUP BY ID
HAVING count(ID)>1
【讨论】:
好一个奈杰尔+1 是的,我试过我只是得到未定义的索引条形码..这很奇怪......在我的表(条形码)中,列是条形码,产品所以我修改了你输入的内容并将 ID 替换为条码 完美,非常感谢以上是关于检查数组中的重复条目,但仅返回重复的值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组