Michael: Tatort - Sendezeiten > Multiarray sortieren nach Timestamp

Hi,

heute heißt es nacharbeiten. Auf unserer Unterseite: http://tatort-fans.de/tatort-gestern-und-vorgestern/ sollen die Sendungen anders herum sortiert werden.
Das heißt der letzte Tatort sollte oben stehen uns die älteste Wiederholung unten.
Zum Sortieren habe ich daher alle Einträge in ein Array gepackt: siehe http://pastebin.com/Mwd9vRLK .
Sortieren möchte ich nach ["timestamp"] im Modus ASC (kleinster Wert nach oben). Nur wie sortiere ich ein Mulitarray?
http://php.net/manual/de/function.array-multisort.php hat zwei Werte?

Und

foreach (tatort_sendezeiten_array as $key => $row) {  
		$timestamp[$key]    = $row['timestamp'];  
	}  
	  
	array_multisort($timestamp, SORT_ASC, $tatort_sendezeiten_array);

hat nicht funktioniert. Ist es im Büro jetzt zu heiß oder stehe ich nur auf der Leitung.

  1. Om nah hoo pez nyeetz, Michael!

    Da du ja auf dem Server sortieren möchtest, kannst du doch auch die Filme aus der (vermuteten) Datenbank gleich in der gewünschten Reihenfolge auslesen.

    Matthias

    --
    Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Tang und Tanga.

    1. Hi Matthias,

      vielen Dank das du dich bei der Hitze dem Thema annimmst. Die Daten bekomme ich aus einer XML daher muss ich sie im Anschluss sortieren.

      Danke Michael

  2. Tach!

    Zum Sortieren habe ich daher alle Einträge in ein Array gepackt: siehe http://pastebin.com/Mwd9vRLK .
    Sortieren möchte ich nach ["timestamp"] im Modus ASC (kleinster Wert nach oben). Nur wie sortiere ich ein Mulitarray?
    http://php.net/manual/de/function.array-multisort.php hat zwei Werte?

    Vergiss, dass es array_multisort() gibt. Diese Funktion eignet sich nicht für die üblichen Datenstrukturen, bei denen ein Datensatz ein Array ist und viele Datensätze ein Array aus diesen Datensatzarrays. array_multisort() hätte stattdessen gern ein Array, in dem die Felder zu Arrays zusammengefasst sind. Ein Datensatz ergibt sich dann aus den gleich positionierten Elementen in diesen Feld-Arrays. Man nennt diese Strukturen auch array of rows (Datensatz-Array) und array of columns (was array_multisort() gern hätte).

    Zur Lösung deines Problems solltest du dein Augenmerk auf die eigentliche Struktur lenken. Der Begriff Multi-Array ist viel zu unspezifisch und hilft bei der Lösungsfindung kaum. Du hast also genauer beschrieben ein Array und darin für jeden Datensatz ein weiteres Array. Du möchtest nun das äußere Array anhand eines Merkmals der inneren Arrays sortieren. Dazu nimmt man am besten eine Sortierfuntion mit benutzerdefinierter Vergleichsfunktion. Diese findest du unter den Namen u*sort(). Deine zu erstellende Vergleichsfunktion bekommt jeweils zwei Elemente des zu sortierenden Arrays, was in deinem Fall je ein inneres Datensatz-Array ist. Von diesen beiden musst du nun das gewünschte Feld vergleichen und 0, -1 oder 1 zurückgeben, so wie es im PHP-Handbuch beschrieben ist.

    dedlfix.

    1. Danke für alle anderen die noch suchen:

      	$names = array();  
        
      	foreach ($tatort_sendezeiten_array as $user) {  
      		$names[] = $user['timestamp'];  
      	}  
        
      	array_multisort($names, SORT_DESC, $tatort_sendezeiten_array);