Удалить дубликаты из массива PHP (array_unique)

Я получаю конкретное поле из 4 разных таблиц.

<?php

//I connect to the database and the 4 tables

// Location of CSV
$location = 'path.csv';

// List creation that will be updated with the fields and be put into my CSV file
$list = array();

// Read csv file to avoid adding duplicates
$file = fopen($location, 'r');
$data = array();

while($row = fgetcsv($file))
{
$data[] = $row;
}

// Query 1
$sql = ('select distinct(field) as field from '.$table1.'');

// Run the query
$query = $Db->query($sql);

// Check for SQL errors
if ($Db->error)
{
return ($Db->error);
}

// Put data in the list
while ($row = $query->fetch_assoc())
{
array_push($list,array($row['field'], ''));
}

// Query 2
$sql = ('select distinct(field) as field from '.$table2.'');

// Run the query
$query = $Db->query($sql);

// Check for SQL errors
if ($Db->error)
{
return ($Db->error);
}

// Put data in the list
while ($row = $query->fetch_assoc())
{
array_push($list,array($row['field'], ''));
}

// Query 3
$sql = ('select distinct(field) as field from '.$table3.'');

// Run the query
$query = $Db->query($sql);

// Check for SQL errors
if ($Db->error)
{
return ($Db->error);
}

// Put data in the list
while ($row = $query->fetch_assoc())
{
array_push($list,array($row['field'], ''));
}

// Query 4
$sql = ('select distinct(field) as field from '.$table4.'');

// Run the query
$query = $Db->query($sql);

// Check for SQL errors
if ($Db->error)
{
return ($Db->error);
}

// Put data in the list
while ($row = $query->fetch_assoc())
{
array_push($list,array($row['field'], ''));
}// Save list in the csv file without overwriting
$fp = fopen($location, 'a');

foreach (array_unique($list) as $fields)
{
if (in_array($fields, $data))
{
echo "Duplicate found";
}
else
{
echo "Save to file";
fputcsv($fp, $fields);
}
}

fclose($fp);

?>

В конце я проверяю, есть ли поля в файле. Единственная проблема заключается в том, что у меня все еще есть дубликаты, потому что некоторые таблицы могут иметь одно и то же поле. Итак, я хочу удалить дубликаты из массива PHP «список».

Я использую :

$cleanlist = array_unique($list);

но я получаю ошибку:

Примечание PHP: преобразование массива в строку

Более конкретно, изменение в моем коде:

    $cleanlist = array_unique($list);

// Save list in the csv file without overwriting
$fp = fopen($location, 'a');

foreach ($cleanlist as $fields)
{
if (in_array($fields, $data))
{
echo "Duplicate found";
}
else
{
echo "Save to file";
fputcsv($fp, $fields);
}
}

0

Решение

Вы можете значительно сократить объем кода, используя UNION в операторе SELECT.

SELECT field FROM table1
UNION
SELECT field FROM table2
UNION
SELECT field FROM table3
UNION
SELECT field FROM table4

UNION возвращает отличные результаты по умолчанию.

1

Другие решения

Как объяснить в документы, array_unique сравнивает элементы как строки по умолчанию. Вы получаете эту ошибку, потому что PHP пытается преобразовать массив в строку. У вас есть 2D массив, массив массивов.

Вы можете использовать флаг SORT_REGULAR сравнить элементы такими, какие они есть.
Но будьте осторожны, только одинаковые пары ключ / значение считаются идентичными.

2

Это сработало:

$list = array_map("unserialize", array_unique(array_map("serialize", $list)));

$list 2d массив

0
По вопросам рекламы [email protected]