2011-09-12 6 views
6

$ sort_flags 배열을 compare_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

이 같은 클래스의 정적 속성으로 설정할 수 있습니다 : 당신이 다음 PHP를 < 5.3을 사용하는 경우

 
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

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

이 정확한 코드는 익명 함수 변수 범위가'$ sort_flags'가 무엇인지 알지 못하는 한 작동하지 않습니다. – zerkms

2

당신은 당신이 $sort_flags 변수를 전달하여 달성하고자하는 것을 언급하지 않지만, 당신이 (유용 내 this answer을 찾을 수 있습니다 중 하나는 약자, 또는 경우 예를 들어 다음과 같음 다른 것을 달성하기를 원한다).

관련 문제