有很多关于数组和多维数组的问题但只有一个那么两个呢?假设这是数据:
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);