如何过滤重复数据的多维数组?

时间:2014-05-22 22:00:33

标签: php arrays sorting

我的数组设置如下:

Array (
    [0] => Array ( [stage] => biometrics [applicant_id] => b79a4c6ea30611e3a3160675fe500303 ) 
    [1] => Array ( [stage] => biometrics [applicant_id] => b79a4c6ea30611e3a3160675fe600303 ) 
    [2] => Array ( [stage] => biometrics [applicant_id] => b79a4c6ea30611e3a3160675fe700303 ) 
    [3] => Array ( [stage] => biometrics [applicant_id] => b79a4c6ea30611e3a3160675fe800303 ) 
    [4] => Array ( [stage] => biometrics_queue [applicant_id] => b79a4c6ea30611e3a3160675fe900303 ) 
) 

首先,我想查看是否有任何重复的applicant_id,然后我需要检查重复的阶段。如果applicant_id是相同的,但阶段是不同的,它们是可以的,如果applicant_id是相同的并且阶段是相同的(生物识别和生物识别)或如果它是(生物识别和生物识别_queue)我需要从数组中删除该条目。

不知道该怎么做。

所以这就是我到目前为止所拥有的。它有效,但是有很多循环正在进行,不想使用太多资源或进入无限循环......有没有人看到我正在做的事情有什么问题? 首先,我使用了一个名为convert stages的函数,这样如果有任何一个阶段名称,然后将_queue附加到结尾,它会将其更改为阶段名称。

foreach ($timer_entry as $key => $value){
        $timer_entry[$key]['stage'] = convert_stages($timer_entry[$key]['stage']);
      }

然后我在for的内部有一个foreach,检查那些可能相同的applicant_id:

      for ($i = 0; $i < count($timer_entry); $i++) {        
          foreach ($timer_entry as $key => $value){
            if ($key == $i) {
              continue;
            }
            else {
              if ($timer_entry[$key]['applicant_id'] == $timer_entry[$i]['applicant_id']) {
                if ($timer_entry[$key]['stage'] == $timer_entry[$i]['stage']) {
                  unset($timer_entry[$key]);
                }
              }
            }
        }
      }

如果它们是相同的,我会取消它们。

2 个答案:

答案 0 :(得分:0)

我没有测试它,但我认为这可能会成功:

$array = array_map('unserialize', array_unique(array_map('serialize', $array)));

答案 1 :(得分:0)

怎么样:

foreach( $myArray as $index => $element )
    if (isset($tmp[$element['applicant_id']][str_replace('_queue','',$element['stage'])])
        unset($myArray[$index]);
    else
        $tmp[$element['applicant_id']][str_replace('_queue','',$element['stage'])] = true;