Ich möchte das Array der WordPress-Posts mit der Reihenfolge der IDs im ersten Array sortieren.
Ich hoffe, das macht Sinn und bedanke mich im Voraus für jede Hilfe.
Tom
edit: Auf dem Server läuft PHP Version 5.2.14
eines Tages
Dies sollte recht einfach zu bedienen sein usort, die das Array mithilfe einer benutzerdefinierten Vergleichsfunktion sortiert. Das Ergebnis könnte etwa so aussehen:
Ich habe genau diese Lösung eingegeben, +1. PS: Ich denke, Sie müssen $ post_ids vor und nach dieser Funktion array_flip.
– Richard Tuin
9. Januar 2011 um 22:38 Uhr
@Richard Tuin Das wäre eine Lösung – die andere ist zu verwenden array_searchda ich gerade dabei war, meinen Beitrag zu korrigieren.
– einsamer Tag
9. Januar 2011 um 22:40 Uhr
Das sieht nach einer sehr eleganten Lösung aus, aber wenn ich versuche, dies zu implementieren, bin ich verwirrt, was die Funktion tun soll? Wenn ich es direkt von hier kopiere, erhalte ich: Parsing-Fehler: Syntaxfehler, unerwartete T_FUNCTION —- Ich habe das Gefühl, ich sollte eine Funktion erstellen, um den Vergleich durchzuführen? (Entschuldigen Sie auch das Missverständnis … Ich habe zweifellos einen Verzögerungsmoment) … Bearbeiten: Lesen php.net/manual/en/function.usort.php scheint es ein wenig klarer zu machen, aber immer noch stecken!
– Tisch
9. Januar 2011 um 22:43 Uhr
@Tisch $posts ist Ihr Array von Post-Objekten; $post_ids ist Ihr Array von ID-Werten. Verstehen usort, ist es wahrscheinlich am einfachsten, die Handbuchseite zu lesen, auf die ich in meiner Antwort verlinkt habe. Wenn Sie sich immer noch unsicher sind, könnten Sie vielleicht klarstellen, worüber Sie sich nicht sicher sind? Diese Lösung erfordert, dass Sie über PHP 5.3 verfügen – ich werde meine Antwort bearbeiten, um dies widerzuspiegeln.
– einsamer Tag
9. Januar 2011 um 22:46 Uhr
Sie könnten array_flip() anstelle von array_search für die Lösung vor 5.3 verwenden, was viel besser zum Sortieren einer großen Liste wäre
– Ziege
9. Januar 2011 um 23:03 Uhr
Sie könnten einen verschachtelten Schleifenmechanismus erstellen, um die Reihenfolge und die IDs abzugleichen, und ein neues Post-Array neu erstellen.
$new_post_array = array();
foreach($id_array as $id) { //loop through custom ordered ids
foreach($post_array as $post) { //for every id loop through posts
if($id == $post->ID){ //and when the custom ordered id matches the post->ID
new_array[] = $post //push the post on the new array
}
}
}
Das Erstellen einer Kopie beider Arrays (das macht foreach) ist hier unnötig.
– Richard Tuin
9. Januar 2011 um 22:39 Uhr
Vielen Dank für Ihre Antwort. Das funktioniert zwar, wirkt aber etwas träge? Ich habe die Antwort trotzdem akzeptiert, weil sie das tut, wonach ich suche, und mit PHP 5.2 funktioniert
– Tisch
9. Januar 2011 um 22:53 Uhr
Entschuldigung @jondavidjohn, ich musste auf die schnellere Lösung umsteigen. Danke noch einmal.
Sie können einfach b von a statt a von b subtrahieren, um in die andere Richtung zu sortieren
Vielen Dank auch für Ihre Antwort … Die obige Lösung ist sehr ähnlich, also werde ich diese nach Möglichkeit weiterverfolgen. Sieht so aus, als würde mich PHP 5.2 aufhalten 🙁
– Tisch
9. Januar 2011 um 22:53 Uhr
13831300cookie-checkzwei PHP-Arrays – Sortieren Sie ein Array mit der Wertereihenfolge eines anderenyes