문제

연결 배열로 다음 데이터가 있습니다

array
  'abc' => 
    array
      'label' => string 'abc' (length=3)
      'weight' => float 3
  'wsx' => 
    array
      'label' => string 'wsx' (length=3)
      'weight' => float 1
  'qay' => 
    array
      'label' => string 'qay' (length=3)
      'weight' => float 1
  'http://test.com' => 
    array
      'label' => string 'http://test.com' (length=15)
      'weight' => float 0
  'Nasi1' => 
    array
      'label' => string 'Nasi1' (length=5)
      'weight' => float 0
  'fax' => 
    array
      'label' => string 'fax' (length=3)
      'weight' => float 4

"레이블"또는 "무게"를 사용하여 배열을 정렬하고 싶습니다.

레이블의 비교 함수는 다음과 같습니다.

function compare_label($a, $b)
{
    return strnatcmp($a['label'], $b['label']);
}

그리고 다른 함수에서 기능을 호출하는 것보다 다음과 같습니다.

usort($label, 'compare_label');
var_dump($label);

그러나 오류 메시지가 표시되고 배열이 정렬되지 않습니다. 내가 뭘 잘못하고 있는지 모르겠다. 교체하려고했습니다.

  • usort($label, 'compare_label'); ~와 함께 usort($label, compare_label);
  • usort($label, 'compare_label'); ~와 함께 usort($label, $this->compare_label);

성공없이. 누군가 나에게 힌트를 줄 수 있습니까?

도움이 되었습니까?

해결책

만약에 compare_label 멤버 함수 (즉, 클래스 메소드)이면 다르게 전달해야합니다.

usort( $label, array( $this, 'compare_label' ) );

기본적으로 함수 이름의 문자열을 보내는 대신 첫 번째 요소가 컨텍스트 (메소드를 찾을 수있는 개체)이고 두 번째 요소는 함수 이름의 문자열입니다. .

노트: 메소드가 정적 인 경우 클래스 이름을 배열의 첫 번째 요소로 전달합니다.

usort( $label, array( __CLASS__, 'compare_label' ) );

다른 팁

비교 함수는 글로벌 함수 또는 객체의 방법으로 정의됩니까? 방법이라면 방법을 약간 변경해야합니다.

usort($label, array($object, "compare_label")); 

또한 클래스 자체의 정적 방법으로 선언 할 수도 있습니다.

public static function compare_label ($a, $b) {
   [...]
}

usort($label, array(Class_Name, "compare_label"));
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top