Проверять наличие повторяющихся записей в массиве, но возвращать только повторяющиеся значения

Я пытаюсь найти повторяющиеся записи внутри массива ... Достаточно просто ....

Однако я хочу, чтобы он возвращал только повторяющиеся значения. Я не хочу, чтобы он отображал все значения массива с подсчетом (их более 400 миллионов записей)

Вот код, который я пробовал (он печатает все значения, но не то, что я хочу)

    $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

Как выглядит массив? Дайте нам простой

Andreas 31.10.2018 13:25
1
1
359
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Думаю, array_unique сделает вашу работу. Это встроенная функция php, которая удаляет все повторяющиеся значения из массива.

если вы собираетесь использовать только повторяющиеся значения, вы можете использовать другую встроенную функцию array_diff, используя оба массива.

Это не отвечает на вопрос. OP хочет список всех дубликатов, а не уникальный список.

Andreas 31.10.2018 13:28

ну я только что отредактировал ответ. @Andreas Пожалуйста, проверьте еще раз

Pritam Jinal 31.10.2018 13:29

Используйте 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]));

Это все, что тебе нужно. В массиве уже указано количество значений (ключей).

Ответ принят как подходящий

В зависимости от того, что вы хотите отобразить (например, это просто дает идентификатор строки), было бы лучше попробовать это в SQL ...

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

Идея состоит в том, чтобы просто получить идентификаторы, где значение счетчика больше единицы.

Так это может выглядеть ...

$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

Andreas 31.10.2018 13:30

Да, я пробовал, что я просто получаю неопределенный индексный штрих-код ... что странно ... В моей таблице (штрих-коды) столбцы - это штрих-код, продукт. Итак, я изменил то, что вы поместили, и заменил идентификатор на штрих-код.

Chris Yates 31.10.2018 13:34

Отлично, большое спасибо

Chris Yates 31.10.2018 13:51

Другие вопросы по теме