/ / Отримайте повторювані та унікальні дані між двома багатовимірними масивами - php, масивами

Отримати дублікати та унікальні дані між двома багатовимірними масивами - php, масивами

Там багато питань, що стосуються масивів та багатовимірних масивів, але лише один, то як щодо двох тоді? Скажімо, це дані:

Array
(
[0] => Array
(
[BRANCHCODE] => 2
[BRANCH] => BRANCH 1
[AGREEID] => 1
)

[1] => Array
(
[BRANCHCODE] => 2
[BRANCH] => BRANCH 2
[AGREEID] => 2
)

[2] => Array
(
[BRANCHCODE] => 2
[BRANCH] => BRANCH 3
[AGREEID] => 3
)
)

Array
(
[0] => Array
(
[BRANCHCODE] => 2
[BRANCH] => BRANCH 4
[AGREEID] => 1
)

[1] => Array
(
[BRANCHCODE] => 2
[BRANCH] => BRANCH 5
[AGREEID] => 4
)

[2] => Array
(
[BRANCHCODE] => 2
[BRANCH] => BRANCH 6
[AGREEID] => 5
)
)

Мені вдалося отримати дублювані дані, але я не можу отримати унікальні дані. Ось php-код про те, як я отримав дублікати, а також кількість дублюваних даних.

Тут я прошиваю обидва обох масивиперший - це масив завантажених даних, а наступний цикл - результати бази даних. Я порівняв два масиви, якщо AGREEID у завантажених даних має дублікат у базі даних. Якщо AGREEID у завантажених даних унікальний, я вставляю їх у базу даних.

foreach ($result as $key=>$upload_data) {
$agreeid_upload = $result[$key]["AGREEID"];
$data = $result[$key];
$another_data = $result[$key];

foreach ($reports as $dbase_data) {
$agreeid = $dbase_data->AGREEID;
if($agreeid_upload == $agreeid){ /// record has duplicate in the database
$count_duplicates = $count_duplicates + 1;
$duplicates[$key] = $data;
}else{
///here i want to store into another array the unique data..
}
}
}

Відповіді:

1 для відповіді № 1

Використовуваний метод спрацював би, але він буде неефективним з великим обсягом даних, оскільки це зробить багато зайвих циклів.

$dbAgreeeData = array();
$duplicates = array();
$unique = array();
foreach ($reports as $dbase_data) {
$dbAgreeeData[$db_dbase_data->AGREEID] = $dbase_data;
}

foreach ($result as $key=>$upload_data) {
$agreeId = $upload_data["AGREEID"];
if (isset($dbAgreeeData[$agreeId)){
$duplicates[$agreeId] = $upload_data;
}
else {
$unique[$agreeId] = $upload_data;
}
}
$numDuplicate = count($duplicates);
$numUnique = count($unique);

Or

$dbAgreeeData = array();
$uploadData= array();

foreach ($reports as $dbase_data) {
$dbAgreeeData[$db_dbase_data->AGREEID] = $dbase_data;
}
foreach ($result as $key=>$upload_data) {
$uploadData[$upload_data["AGREEID"]] = $upload_data;
}

$duplicates = array_intersect_key($dbAgreeData, $uploadData;
$unique = array($dbAgreeData, $uploadData);
$numDuplicate = count($duplicates);
$numUnique = count($unique);