2011-09-12 15 views
6

mümkündür, ben compare_by_flags işlevi içinde kullanılabilir bu $ seçenekler dizisine sahip olmak istiyorum, ama bu bir yolunu bulamadık?Usort/uasort cmp işlevine ek parametreler nasıl eklenir?

public function sort_by_rank(array $sort_flags = array()) { 
    uasort($this->search_result_array, array($this, 'compare_by_flags')); 
} 

private static function compare_by_flags($a, $b) { 
    // I want to have this $sort_flags array here to compare according to those flags  
} 
+0

Hangi php sürümünü kullanıyorsunuz? – zerkms

+0

5.2, ama yakında – Riesling

cevap

7

itibariyle bu deneyebilirsiniz

public function sort_by_rank(array $sort_flags = array()) { 
    $this->sort_flags = $sort_flags; 
    uasort($this->search_result_array, array($this, 'compare_by_flags')); 
} 

private static function compare_by_flags($a, $b) { 
    // I want to have this $sort_flags array here to compare according to those flags  
} 
: sadece örnek değişkenleri kullanabilirsiniz

aksi - kullanım kapanışları:

public function sort_by_rank(array $sort_flags = array()) { 
    uasort($this->search_result_array, function($a, $b) use ($sort_flags) { 
     // your comparison 
    }); 
} 
+0

teşekkürler, ilk yaklaşımı kullanarak ve yakında php'yi yükselttikten sonra – Riesling

-1

Böyle, sınıf statik özelliği olarak ayarlayın olabilir: Eğer php < 5.3 kullanıyorsanız

 
public function sort_by_rank(array $sort_flags = array()) { 
    self::$_sort_flags = $sort_flags; 
    uasort($this->search_result_array, array($this, 'compare_by_flags')); 
} 

private static function compare_by_flags($a, $b) { 
    // Read self::$_sort_flags 
    // I want to have this $sort_flags array here to compare according to those flags  
} 

Ayrıca PHP 5,3

 
uasort($array, function($a, $b) { 
    self::compare_by_flags($a, $b, $sort_flags); 
}); 
+0

Bu tam kod sürece anonim işlev değişken kapsamı $ sort_flags' ne 'hiçbir fikri yok gibi çalışmaz yükseltir. – zerkms

2

Sen $sort_flags değişkeni geçirerek elde etmek istediğinizi söz etmeyin, ancak (kullanışlı benim this answer bulabilir ya da duruyor, ya da eğer bir örnek olarak farklı bir şey elde etmek istiyorum).

İlgili konular