array_filter tüm dizi filtreleyerek

2 Cevap php

Ben dizilerin bir dizi, bir tıbbi cihaz ile bir taramanın ayrıntılarını içeren her dizi var. Ben gece dökülmektedir metin günlükleri bu verileri alıyorum. Biçimi şudur:

$this->scans = array(
  array(  
    'patientid' => (int),
    'patientname' => 'John Skeet',
    'reviewed' => 0 or 1
     //plus more irrelevant
  ),
  array(
    //same as above
  ), //etc
)

Yüksek yeterli kalitede ise her tarama gözden olabilir burada önemli dizi anahtarı, reviewed olduğunu. Ancak, metin kütükleri sonra incelenir olanlar ile ve yeniden listeleri gider, edinildiği HER taraması dökümü.

Şimdi çoğaltmaları önlemek için, ben sadece hem edinilen ve gözden geçirilmiş bir array_filter süzmek için taramaları (gözden sürümü tutmak) kullanın diye düşündüm. Ancak, filtre fonksiyonu (bazı nadir durumlar dışında) tüm dizi filtre edilir. Birisi bir göz atın ve o çok takdir oluyor düşünüyorum neden bana bildirin eğer.

$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;

}

2 Cevap

$scan['reviewed'] == 1;

vs

$scan['reviewed'] = 1;

Bir başka yoktur, bu bağlamda hiçbir şey yok ki, bir şarttır.

Ayrıca çok sık return false yayınlanmıyor. Ben mantık (bir durum-çek çekerek) biraz üstlenmeden tarafından biraz daha net ve basit hale getirmek için biraz değiştirmek istiyorum.

if ($scan['reviewed'] and hasDupe($scan)) {
   return false;  // filter out
}
return true; // it is passed back, and is output

hasDupe () yinelenen bir kayıt için bildiğiniz iyi kontrolleri yapar ve doğru / yanlış döndürür.

"==" Vs Simple case "=" bildiğim kadarıyla gördüğünüz gibi.

$scan['reviewed'] = 1;

Yani hile yapmak oughta. Bazen basit sorunlar noktaya zor olan ;-)