Dynmische Platzvergabe

  • Themenstarter Themenstarter Lukasz
  • Beginndatum Beginndatum
L

Lukasz

Hallo Liebes Forum


Ich habe einen Saal der aus einem Multidimensionalen Array besteht

SAAL --> Reihe 1 -> Reihe 2 -> Reihe 3.....

Reihe 1 --> Platz 1 -> Platz 2 -> Platz 3 ....

In jeder Reihe können unterschiedlich viele Plätze sein. So ergbit sich ein Multidimensionales Array.

Da die Platznummer oder Reihennummer nicht wie in der Programmierung mit 0 sondern mit 1 beginnt, möchte ich nun prüfen wieiviel Plätze noch frei sind, und vor allem welche. Das klappt nach mehreren Versuchen wunderbar. Doch wie kann ich prüfen ob 2 oder 3 Plätze nebeneinander frei sind?

Kennt da jemand ein Beispiel?
 
Hmm ich weiß nicht, ob es elegantere Möglichkeiten gibt ...

Du könntest aber mit einer Schleife alle Reihen durchgehen (oder 2 Schleifen, je nachdem) und dann eben immer prüfen, ob 3 Plätze nebeneinander auf 0 sind.
D.h du speicherst in einem zusätzlichen Array die Platznummern.
zB $frei[y][x][0] = Der Startpunkt des ersten freien Platzes und $frei[y][x][1] der Endpunkt.
y soll die Reihe in der die Sitzplätze zur verfügung stehen darstellen und x eben einfach das Element. Es könnte ja zum Beispiel mehrmals 3 Sitzplätze in einer Reihe frei sein, dann hättest du ja mehrere Elemente ;)
Also wenn zB $saal[0][0] bis $saal[0][5] frei ist, steht da als Startpunkt eben 0 und als Endpunkt 5. (Edit: Dann würde es auch $frei[0][0][0] bzw $frei[0][0][1] für das erste Element - also die ersten freien Plätze- heißen. Die erste Null für die Reihe 0, die zweite für das Element 0 und die dritte 0 bzw. 1 eben für Start/Endpunkt)
Wenn du das ganze per Schleifen machst und ein paar ifs dazu packst, geht das locker ;) Ich hoffe das war einigermaßen verständlich, falls nicht, mache ich vielleicht mal aus Langeweile ein Beispiel :P
 
Zuletzt bearbeitet:
Mh, spontan würde ich das Array mit einer Schleife durchlaufen und einfach zählen wieviel Plätze nebeneinander sind.
PHP:
$counter = 0;
for($i=0;$i<=count($arrSaal);$i++)
{
     for($j=0;$j<=count($arrSaal[$i]);$j++)
     {
          if($arrSaal[$i][$j] == 0) // wenn leer
               $counter++;
          else
          {
                if($counter > 1)
                {
                       // Es waren mehrere Plätze nebeneinander
                       // Start = $j - $counter;
                       // Ende = $j
                      $counter = 0;
                 }
                 else
                       $counter = 0;
          }
     }
     // hier selbe Prüfung wie oben
     // wg. Reihenwechsel
     // if($counter > 1) ...
}
Das ist nur ein grober ungetesteter Ansatz, aber sollte als Orientierungshilfe reichen.
So würde ich das erstmal angehen.
 
Zuletzt bearbeitet:
Genau so hab ich mir das gedacht ;)
Nur eben die freien Plätze schön als Array speichern.
Wie gesagt halt $frei['Reihe']['Element']['Start/EndPunkt'] und dann müsste das passen.

Nur eine Sache versteh ich nicht. Das
PHP:
     // hier selbe Prüfung wie oben
     // wg. Reihenwechsel
     // if($counter > 1) ...
Es werden doch durch die Schleifen automatisch alle Reihen überprüft. Passt doch ;)
Und dann anstatt $start und $ende eben die Werte in ein Array speichern, damit die nicht immer überschrieben werden (siehe $frei)
 
Zuletzt bearbeitet:
Hm, erkläre ich am besten an einem Beispiel:
Reihe 1: Platz1 - Platz 30
Reihe 2: Platz1 - Platz 30

Die Schleife steht momentan auf Reihe 1: Platz 30.
Platz 30 ist frei -> counter++;

Nächster Schleifendurchlauf: Reihe 2: Platz 1.
Platz 1 ist frei -> $counter++;

Somit wären für das Programm Reihe 1: Platz 30 und Reihe 2: Platz 1 nebeneinander.
Das soll dadurch verhindert werden.
 
Hm ja, da reicht es doch nach der 1. Schleife ein $counter = 0; hinzumachen oder?
Edit: Nach der 2. Schleife mein ich :D Also for () { fr() {} <HIER> }
 
Trotzdem musst du ja noch die freien Plätze bis zum letzten Platz erfassen (deswegen if($counter > 1) ...). Die würden ja sonst einfach wegfallen.
 
Ahh ja ich weiß was du meinst ;) Weil oben das nur in Kraft tritt, wenn ein Sitzplatz 0 ist und wenn am Ende nur 1er kommen, wird das gar nicht mehr gespeichert.
Ok :)

Man könnte es aber auch so umschreiben, dass man das am Ende nicht mehr braucht ... Aber ist ja egal, das sind alles Feinheiten, darum darf sich dann der Threadersteller kümmern, falls er will.
 
Also die Vorschläge sind ja erste Sahne, und für die Mühen und guten Vorschläge mein Dickes Lob!

Das eigentliche Problem liegt ja nur darin, dass es Beispielweiße auch 4 Plätze nebeneinander sein könnten. Oder eben auch nur 2.

Ich habe sozusagen ein Kino, dort sind verschiedene Säle, und die haben diverse Reihen mit Sitzplätzen.

So habe ich bislang die Array so angeordnet
(als Array gesehen)
[S1]
[R1][1->X][2->0]...
[R1][1->0][2->0]...

Okay jetzt möchten 3 Freunde eine Kinokarte, und alle samt nebeneinander sitzen. Was also fehlt, wie ich dir Koordinaten herausbekomme, welche Reihe und welche Plätze das sind.

Der Kunde bekommt dann eine Mail, (Sie haben die Plätze XYZ reserviert).

Das wesentliche Problem besteht darin, dass die Plätze eindeutig nummeriert sind.

(real gesehen)
Das heist Reihe1: Platz 1-33
Reihe2: Platz 34-77

Ich möchte jetzt eigentlich das Ergebnis bekommen, Platz 44-47 frei in Reihe 2.

Ist denke ich schon was für Gurus!
 
Zuletzt bearbeitet von einem Moderator:
Hab ich nicht getestet sonder im kopf gemacht, müsste aber meiner Meinung nach klappen :) Und ein Guru muss man dafür nicht sein ;)

PHP:
<?php
$FreieSitze = 3;
$AnzahlReihen = 100;
$AnzahlSitzplätze = 100;
$saal[$AnzahlReihen][$AnzahlSitzplätze]; //weiß nicht ob das bei PHP so geht...
for($i = 0; $i < $AnzahlReihen; $i++)
{
	for($j = 0; $j < $AnzahlSitzplätze; $j++)
	{
		if($saal[$i][$j] == 0)
			$frei++;
		else
			$frei = 0;
			
		if($frei = $FreieSitze)
			break;
	}
}

echo 'In Reihe '.$i+1.' sind die Sitze '.$i+1.'-';

for($count = 1; $count <= $FreieSitze)
{
	$i--;
}
echo $i-1;
?>
 
Zurück