首页 > 解决方案 > 检查数组中的重复条目,但仅返回重复的值

问题描述

我试图在数组中搜索重复记录......很容易......

但是我只希望它返回重复的值。我不希望它显示带有计数的整个数组值(有超过 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 的值

标签: phparrayscountduplicates

解决方案


根据您想要显示的内容(例如,这只是给出一行的 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

推荐阅读