У меня есть массив массивов, каждый из которых содержит подробности сканирования медицинским устройством. Я получаю эти данные из текстовых журналов, которые сбрасываются каждую ночь. Формат которого таков:
$this->scans = array(
array(
'patientid' => (int),
'patientname' => 'John Skeet',
'reviewed' => 0 or 1
//plus more irrelevant
),
array(
//same as above
), //etc
)
Важным ключом массива здесь является reviewed
, так как каждое сканирование может быть просмотрено, если оно достаточно высокого качества. Тем не менее, текстовые журналы сбрасывают КАЖДОЕ полученное сканирование, затем возвращаются назад и повторно перечисляют просмотренные.
Теперь, чтобы предотвратить дублирование, я подумал, что мог бы просто использовать array_filter
для фильтрации отсканированных и просмотренных сканов (сохраняя проверенную версию). Однако функция фильтра отфильтровывает весь массив (за исключением некоторых редких случаев). Если бы кто-то мог взглянуть и сообщить мне, почему они думают, что это происходит, это было бы очень ценно.
$this->scans = array_filter($this->scans, array($this, "scan_cleanup"));
.
private function scan_cleanup($scan) {
//only if the scan was not reviewed
if ($scan['reviewed'] == 0) {
//change reviewed status to see if there is a duplicate
$scan['reviewed'] == 1;
//return false to remove this copy (and keep reviewed)
if (in_array($scan, $this->scans)) {
return false;
}
}
return true;
}