使用php收集数组中的重复数据

时间:2017-10-18 05:57:46

标签: php arrays duplicates

  

这是来自bio-metrics的样本数组数据   我只想收集具有相同bio_id和日期

的数据
temp:[
0:{
 bio_id:"1"
 date:"2017-10-05"
 date_time:"2017-10-05 08:00:22"
 device_name:"biometrics"
 time:"08:00:22"
}
1:{
 bio_id:"1"
 date:"2017-10-05"
 date_time:"2017-10-05 08:00:23"
 device_name:"biometrics"
 time:"08:00:23"
}
2:{
 bio_id:"2"
 date:"2017-10-05"
 date_time:"2017-10-05 08:06:29"
 device_name:"biometrics"
 time:"08:06:29"
}
3:{
 bio_id:"1"
 date:"2017-10-05"
 date_time:"2017-10-05 15:06:47"
 device_name:"biometrics"
 time:"15:06:47"
}
4:{
 bio_id:"2"
 date:"2017-10-05"
 date_time:"2017-10-05 16:01:50"
 device_name:"biometrics"
 time:"16:01:50"
}
] 
  

我一直坚持使用我制作的代码,并且不知道我应该如何操作它,或者我将如何正确存储它,我尝试了一些数组函数,但它给我的数据提供了不同的结果

$len = count($temp);
for ($i=0; $i <$len ; $i++) { 
  $id = $temp[$i]['bio_id'];
  $date = $temp[$i]['date'];
 for ($x=0; $x < $len; $x++) { 
   if ($id == $temp[$x]['bio_id'] && $date == $temp[$x]['date']) {
         $data[] = $temp[$x];
         $int[] = $x;
   }
 }
}
  

我不知道应该如何操作它,或者我将如何正确存储它,我尝试了一些数组函数,但它给我的数据提供了不同的结果

3 个答案:

答案 0 :(得分:1)

此代码将根据id和date

收集数组中的副本
$newTemp = array();
foreach($temp as $value){
  $newTemp[$value['id'].'_'.$value['date']][] = $value;  
}

答案 1 :(得分:0)

  

我只是想收集具有相同bio_iddate

的数据

最简单的方法是迭代输入数组并将数据聚合到一个新数组中,并使用bio_iddate字段生成的密钥编制索引。这样,可以轻松识别重复条目,因为密钥已经存在于输出数组中。

$input = array(/* the big input array here */);
// Build the output here
$output = array();    
foreach ($input as $item) {
    $key = $item['bio_id'].':'.$item['date'];

    if (array_key_exists($key, $output)) {
        // This is a duplicate
        // Ignore the data, update only the count
        $output[$key]['count'] ++;
    } else {
        // This is the first time this combination is processed
        // Copy the input
        $output[$key] = $item;
        // Keep in 'count' how many times this combination exists in the input
        $output[$key]['count'] = 1;
    }
}

$output的每个条目都是$input的第一个条目,具有bio_iddate的相同组合。另外,count的值是分享$inputbio_id对的date条目数。

如果您需要以不同的方式聚合数据,请使用此示例(保留所有重复数据,而不是数字,等等。)

另一个保留重复项的示例:

// Build the output here
$output = array();    
foreach ($input as $item) {
    $key = $item['bio_id'].':'.$item['date'];

    if (array_key_exists($key, $output)) {
        // This is a duplicate; add it to the list
        $output[$key]['all'][] = $item;
    } else {
        // This is the first time this combination is processed
        // Copy important values (bio_id and date) from the input
        $output[$key] = array(
            'bio_id' => $item['bio_id'],
            'date'   => $item['date'],
            // Store the entire $item into a list
            'all'    => array($item),
        );
    }
}

了解PHP arrays如何使用square brackets syntax以及如何create or modify their values访问其元素。

答案 2 :(得分:0)

$newTemp = array();
for($temp as $value){
  $key = $value->id." ".$value->date;
  if(isset($newTemp[$key])){
    $newTemp[$key] = array_merge($newTemp[$key],$value);
  }else{
    $newTemp[$key] = $value;
  }

}