获取两个多维数组之间的重复和唯一数据


Get duplicate and unique data between two multi-dimensional arrays

有很多关于数组和多维数组的问题但只有一个那么两个呢?假设这是数据:

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.. 
            }
        }
    }

使用的方法可以工作,但是对于大量数据来说效率很低,因为它会做很多额外的循环。

$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);

$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);