2011-09-12 14 views
6

मैं इस $ sort_flags सरणी को compar_by_flags फ़ंक्शन के भीतर उपलब्ध करना चाहता हूं, लेकिन मुझे इसका कोई तरीका नहीं मिला, क्या यह संभव है?usort/uasort cmp फ़ंक्शन में अतिरिक्त पैरामीटर कैसे जोड़ें?

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

आप किस PHP संस्करण का उपयोग करते हैं? – zerkms

+0

5.2, लेकिन जल्द ही – Riesling

उत्तर

7

के रूप में आप केवल इंस्टेंस चर का उपयोग कर सकते हैं:

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  
} 

अन्यथा - उपयोग बंद:

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

धन्यवाद, पहला दृष्टिकोण का उपयोग करके और जैसे ही हम PHP को अपग्रेड करेंगे स्विच करेंगे – Riesling

-1

आप वर्ग स्थिर संपत्ति के रूप में सेट कर सकता है, इस तरह:

 
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  
} 

इसके अलावा, आप आप php < 5.3 तब का उपयोग करते हैं यह कोशिश कर सकते, पीएचपी 5,3

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

अपग्रेड करेगा यह सटीक कोड काम नहीं करेगा, जब तक अनाम कार्य चरणीय क्षेत्र को पता नहीं है कि '$ sort_flags' क्या है। – zerkms

2

आप आप क्या $sort_flags चर पारित करके हासिल करना चाहते हैं का उल्लेख नहीं है, लेकिन आप मेरा this answer उपयोगी लग सकते (या तो यह खड़ा है, या यदि आप एक उदाहरण के रूप के रूप में कुछ अलग हासिल करना चाहते हैं)।

संबंधित मुद्दे