Hallo Bernd,
Ich nehme mal an, dass Du Die Inhalte deines $abwesend-Arrays nachher aus der Datenbank holst. Da kannst Du einen ORDER BY t_von ins SQL schreiben und brauchst Dir keinen Kopf mit Multisort zu machen. D.h. für deine Experimente kannst Du dein Array gleich so aufbauen, wie Du es nachher aus der DB bekommst. Eine Trennung in $von und $bis Array würde ich auch für ungünstig halten. Aus der DB bekommst Du Rows, d.h. von und bis sind dann in einem Zeilen-Array. Auf dieser Struktur solltest Du aufsetzen. Ich würde die Testdaten so hinschreiben (unter der Annahme, dass deine DB-Felder t_von und t_bis lauten):
$termine = [ [ 't_von' => "10:00", 't_bis' => "11:00") ],
[ 't_von' => "12:15", 't_bis' => "13:00") ],
[ 't_von' => "15:00", 't_bis' => "16:30") ]
];
Bzw. wenn Du unbedingt selbst sortieren willst, ist das Sortieren eines solchen Arrays mit usort einfacher:
usort($termine, function($t1, $t2) { return $t1['t_von'] <=> $t2['t_von']; });
usort bekommt eine Callback-Funktion als Parameter und übergibt ihr die beiden Array-Einträge, für die eine Information "kleiner, gleich oder größer" gebraucht wird. Dazu muss die Callback-Funktion einen Wert kleiner als 0, gleich 0 oder größer als 0 zurückgeben. Der "Spaceship" Operator (ab PHP 7 verfügbar) tut genau das. Solltest Du noch bei PHP 5.x stecken - hm, weg da, ist tot. Bis dahin kannst Du statt Spaceship auch $t1['t_von'] < $t2['t_von'] ? -1 : 1;
verwenden.
Aber - wie gesagt - mach Dir um die Sortiererei keinen Kopf, wenn Du das nachher im SQL lösen kannst.
Dein anderes Problem ist die foreach-Schleife. Die eignet sich nicht, wenn man zwei Array-Elemente gleichzeitig braucht. Nimm for ($i=1; $i<count($termine); $i++)
. Beachte: Start bei $i=1
. Und dann verwende die Array-Einträge bei $i-1]
und $i
. Achte aber auch auf die mögliche Freizeit vor dem ersten und nach dem letzten Termin!
Rolf
sumpsi - posui - clusi