Ich habe ein Array von Arrays, wobei jedes Array Details eines Scans durch ein medizinisches Gerät enthält. Ich erhalte diese Daten aus Textprotokollen, die jede Nacht ausgegeben werden. Das Format von denen ist dies:array_filter das ganze Array ausfiltern
$this->scans = array(
array(
'patientid' => (int),
'patientname' => 'John Skeet',
'reviewed' => 0 or 1
//plus more irrelevant
),
array(
//same as above
), //etc
)
Der wichtige Array Schlüssel hier ist reviewed
, da jeder Scan überprüft werden kann, wenn sie eine ausreichend hoher Qualität ist. Die Textprotokolle löschen jedoch JEDEN Scan, der erfasst wurde, gehen dann durch und listen erneut diejenigen auf, die überprüft wurden.
Jetzt, um Duplikate zu verhindern, dachte ich, ich könnte einfach eine array_filter
verwenden, um Scans herauszufiltern, die sowohl erworben als auch überprüft wurden (die geprüfte Version behalten). Die Filterfunktion filtert jedoch das gesamte Array (außer in einigen seltenen Fällen). Wenn jemand einen Blick darauf werfen könnte und mich wissen lassen würde, warum er denkt, dass es passiert, würde das sehr geschätzt werden.
$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;
}
Zahlen, es ist immer etwas so Einfaches. Ich habe das für immer ausprobiert. Vielen Dank. – tj111
Das Update, das ich hinzugefügt habe, wird auch in Bezug auf die Lesbarkeit sehr hilfreich sein –