检查数组中的重复条目,但仅返回重复的值

时间:2018-10-31 12:21:07

标签: php arrays count duplicates

我正在尝试在数组内搜索重复的记录... 很容易....

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

3 个答案:

答案 0 :(得分:3)

根据您要显示的内容(例如,它仅给出行的ID),最好在SQL中尝试...

SELECT ID 
    FROM `barcodes` 
    GROUP BY ID 
    HAVING count(ID)>1

想法是只检索计数值大于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 :(得分:0)

使用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]));

是您所需要的。数组已经显示了值(键)的计数。

答案 2 :(得分:-1)

我想array_unique将为您效劳。它是php的内置函数,可从数组中删除所有重复的值。

如果打算仅使用重复值,则可以同时使用两个数组的另一个内置函数array_diff