2009-06-02 13 views
0

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; 

} 

Antwort

2
$scan['reviewed'] == 1; 

vs

$scan['reviewed'] = 1; 

One ist eine bedingte, dass nichts in diesem Zusammenhang der Fall ist, der andere nicht da ist.

Sie laufen auch nicht häufig die return false. Ich würde die Logik etwas ändern, um sie ein wenig klarer und einfacher durch ein wenig Refactoring zu machen (indem ich eine Zustandsüberprüfung durchführe).

hasDupe() führt die besten Prüfungen durch, die Sie für einen doppelten Datensatz kennen, und gibt true/false zurück.

+0

Zahlen, es ist immer etwas so Einfaches. Ich habe das für immer ausprobiert. Vielen Dank. – tj111

+1

Das Update, das ich hinzugefügt habe, wird auch in Bezug auf die Lesbarkeit sehr hilfreich sein –

1

Einfacher Fall von "==" vs. "=" soweit ich sehen kann.

$scan['reviewed'] = 1; 

Das soll den Trick tun. Manchmal sind die einfachsten Probleme am schwersten zu erkennen ;-)

Verwandte Themen