如何在多维数组中找到重复条目的键

时间:2019-07-11 10:04:01

标签: php arrays

我正在报告约会活动,并且包括一项将原始数据导出到KPI背后的功能。这些原始数据以CSV格式存储,我需要检查是否已输入可能重复的咨询。

根据患者ID和约会ID为每行数据分配唯一的访问ID。原始数据包含30列数据,只需要对其中的7列执行重复检查。我已经导入了CSV文件,并创建了一个如下所示的数组作为第一条记录,然后添加其余内容。

$mds = array(
    $unique_visit_id => array(
        $appt_date, 
        $dob, 
        $site, 
        $CCG, 
        $GP, 
        $appt_type, 
        $treatment_scheme
    )
);

我需要扫描$mds数组并返回仅包含$unique_visit_id的任何重复数组的数组。

例如键1111、2222和5555所有引用数组的所有七个值都包含相同的值,那么我需要返回2222和5555。

我尝试搜索,但未提出任何可行的方法。

谢谢

1 个答案:

答案 0 :(得分:0)

这是我一直使用的,仍在验证(数据集非常大),但到目前为止似乎仍能按预期运行

$handle = fopen("../reports/mds_full_export.csv", "r");

$visits = array();

while($data = fgetcsv($handle,0,',','"') !== FALSE){
    $key = $data['unique_visit_id'];
    $value = $data['$appt_date'].$data['$dob'].$data['$site'].$data['$CCG'].$data['$GP'].$data['$appt_type'].$data['$treatment_scheme'];
  $visits[$key] = $value;
}

$visits = asort($visits);
$previous = "";
$dupes = array();

foreach($visits as $id => $visit){ 
    if(strcmp($previous, $visit) == 0){
        $dupes[] = $id;
    }
    $previous = $visit;
}

return $dupes;