我正在尝试在数组内搜索重复的记录... 很容易....
但是,我只希望它返回重复的值。 我不希望它显示带有计数的整个数组值(有超过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的值
答案 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
。