Übergeben Sie zusätzliche Parameter an den Rückruf
Ich habe die folgenden Funktionen. WordPress-Funktionen, aber dies ist wirklich eine PHP-Frage. Sortieren Sie meine $term
Objekte gemäß der artist_lastname
Eigenschaft in jedem Objekt-Metadaten.
Möchte ich übergeben Sie eine Zeichenfolge in $meta
in der ersten Funktion. Dies würde mir die Wiederverwendung dieser code, wie ich es anwenden konnte, um die verschiedenen Metadaten-Eigenschaften.
Aber ich weiß nicht undertstand wie kann ich pass extra Parameter an den usort-Rückruf. Ich habe versucht, eine JS style anonyme Funktion, aber die PHP version auf dem server ist zu alt und warf einen syntax-Fehler.
Jede Hilfe oder einen Schubs in Richtung der rechten Ecke des Handbuch - herzlich willkommen. Danke!
function sort_by_term_meta($terms, $meta)
{
usort($terms,"term_meta_cmp");
}
function term_meta_cmp( $a, $b )
{
$name_a = get_term_meta($a->term_id, 'artist_lastname', true);
$name_b = get_term_meta($b->term_id, 'artist_lastname', true);
return strcmp($name_a, $name_b);
}
InformationsquelleAutor der Frage djb | 2011-11-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
In PHP eine option für eine Rückruf ist vorbei, eine zwei-element-array, ein Objekt-handle und den Namen einer Methode auf dem Objekt aufrufen. Zum Beispiel, wenn
$obj
wurde eine Instanz der KlasseMyCallable
und Sie möchten, rufen Sie diemethod1
Methode derMyCallable
auf$obj
dann können Sie passarray($obj, "method1")
als callback.Einer Lösung mit Hilfe dieser unterstützt callback-Typ definieren eine einfache Klasse, die im wesentlichen wirkt wie ein Verschluss Typ:
InformationsquelleAutor der Antwort Daniel Trebbien
Ich denke, diese Frage verdient ein update. Ich kenne die original-Frage war für die PHP-version 5.2, aber ich kam hier auf der Suche nach einer Lösung und fand eine, die für neuere Versionen von PHP und dachte, das könnte nützlich sein für andere Menschen.
Für PHP 5.3 und höher, können Sie die "verwenden " keyword einführen, lokale Variablen in der lokalen Gültigkeitsbereich von einer anonymen Funktion. Also Folgendes sollte funktionieren:
Einige mehr Allgemeine code
Wenn Sie möchten, Sortieren Sie ein array nur einmal und müssen ein zusätzliches argument können Sie eine anonyme Funktion wie folgt:
Wenn Sie eine wieder verwendbare Funktion, um ein array Sortieren, das braucht ein zusätzliches argument, kann man immer wickeln Sie die anonyme Funktion, wie für die ursprüngliche Frage:
InformationsquelleAutor der Antwort Bas
Vorausgesetzt, Sie haben den Zugriff auf die Objekte und statische (PHP 5 oder höher), können Sie ein Objekt erstellen, und übergeben Sie die Argumente dort direkt, wie so:
Vorausgesetzt, Sie haben keinen Zugang zu Objekten/statische; Sie könnte nur eine Globale:
InformationsquelleAutor der Antwort Kato
Die docs sagen, dass
create_function()
arbeiten sollten, die auf PHP >= 4.0.1. Funktioniert das?InformationsquelleAutor der Antwort John Watson
Diese helfen Ihnen nicht bei allen mit
usort()
aber vielleicht hilfreich sein, doch. So Sortieren Sie das array mit einer der anderen Funktionen sortiert,array_multisort()
.Die Idee ist, erstellen ein array mit den Werten, die Sie die Sortierung auf (die Rückgabewerte von
get_term_meta()
) und multisort, die gegen Ihre Haupt -$terms
array.InformationsquelleAutor der Antwort salathe