Frage

ich habe folgende Daten als assoziatives Array

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

Ich mag das Array sortieren "label" oder "Gewicht" mit

Die Vergleichsfunktion für das Label ist:

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

und als ich nenne nur die Funktion von einer anderen Funktion:

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

aber dann bekomme ich die Fehlermeldung und das Array sortiert ist nicht. Ich weiß nicht, was ich falsch mache. Ich habe versucht, zu ersetzen:

  • usort($label, 'compare_label'); mit usort($label, compare_label);
  • usort($label, 'compare_label'); mit usort($label, $this->compare_label);

ohne Erfolg. Kann mir jemand einen Tipp geben?

War es hilfreich?

Lösung

Wenn compare_label ist eine Elementfunktion (das heißt Klassenmethode), dann müssen Sie es anders passieren.

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

Im Grunde genommen, anstatt nur einen String des Funktionsnamen senden, senden Sie ein Array mit zwei Elementen, wobei das erste Element ist der Kontext (Objekt, auf das das Verfahren gefunden werden kann), und das zweite Element ist die Folge von der Name der Funktion.

Hinweis: Wenn Ihre Methode statisch ist, dann übergeben Sie die Klassennamen als das erste Element des Arrays

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

Andere Tipps

Ist die Vergleichsfunktion als eine globale Funktion oder als Methode eines Objekts definiert? Wenn es ein Verfahren ist, werde müssen Sie ändern, wie Sie es nennen leicht:

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

Sie können es auch als eine statische Methode der Klasse erklären sich:

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

usort($label, array(Class_Name, "compare_label"));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top