我的数组设置如下:
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]);
}
}
}
}
}
如果它们是相同的,我会取消它们。
答案 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;