# Schleifen (for / while) variabel verschachteln



## gunhero (12. Februar 2004)

hallihallo... 

ich versuche zur zeit an nem script zu arbeiten, dass mir die möglichkeiten von verschiedenen lotto-system-scheinen ausspuckt. also zb. bei 7 angekreuzten zahlen eben 7 arrays mit je 6 zahlen. dabei natürlich die richitgen 

dieses sieht (für 7 zahlen) folgendermaßen aus:


```
$meine_zahlen = array(1,2,3,4,11,7,10);
$lottozahlen = array(1,2,3,4,5,6);
$kaestchen = array();

//7 aus 49:
$k = "0";
for($a="0";$a<="6";$a++)
{
	for($s="0";$s<="6";$s++)
	{
		if($a != $s)
		{
			$kst[$k][] = $meine_zahlen[$s];
		}
	}
	$k++;
}
```

$k = "Nummer des aktuellen Kästchens"
$a = "Aktuelle nicht im Kästchen vorkommende Zahl"
$s = "Aktuelle Stelle, die überprüft wird"

sooo 
etz geht es im weiteren um diese $a ... 
wenn man nun 8 zahlen ankreuzt ... dann gibt es ja da auch 2 zahlen, die nicht in die wertung eingehen (also 8 - 6 = 2) ... demzufolge $a und $b ... 

wie der code an sich aussieht weis ich (einfach 1 for - schleife mehr in den oberen code) ... etz is die frage:
IST ES MÖGLICH DIE SCHLEIFENWIEDERHOLUNG VARIABEL ZU MACHEN?
für 7 zahlen braucht man 2 schleifen
für 8 braucht man 3 schleifen 
und es wird immer 1 mehr

geht das ?

danke schon im vorraus
gunny


----------



## gunhero (12. Februar 2004)

in dem code muss das $kst[...][...] natürlich auch $kaestchen[...][...] heißen ...


----------



## DeeJTwoK (13. Februar 2004)

Du könntest deinen bisherigen code mit einer weiteren for-schleife einklammern:


```
for ($z=1;$z<=(count($meine_zahlen)-count($lottozahlen));$z++)
{
//Schleifen...
}
```

count(); zählt die elemente eines arrays. die bedingung gibt also die von dir gesuchte differenz zurück

(ich hoffe ich hab dein probliem richtig verstanden, denn der sinn des programms ist mit ziemlich unklar!)

mfg DJ2K


----------



## gunhero (13. Februar 2004)

hi


```
for ($z=1;$z<=(count($meine_zahlen)-count($lottozahlen));$z++) 
{ 
//Schleifen... 
}
```

das würde mir wenig bringen, da ja dabei X schleifen hinteinander gesetzt werden. und ich will (bzw muss) se ja verschachteln.

vielleicht sollte ich mein problem nochmals erklären (ist nicht grade einfach) - also:

um alle kombinationsmöglichkeiten beim systemschein rauszubekommen kann man das system wie folgt verwenden:
1 = "zahl auf dem schein vorhanden"
0 = "zahl NICHT auf dem schein vorhanden"
"dem schein" ist der aktuelle schein, der gerade überprüft wird.
so
nehmen wir mal an man würde die zahlen 1,2,3,4,5,6 und 7 ankreuzen. dann würde das wie folgt aussehen:

1 - 2 - 3 - 4 - 5 - 6 - 7
0 - 1 - 1 - 1 - 1 - 1 - 1
1 - 0 - 1 - 1 - 1 - 1 - 1
1 - 1 - 0 - 1 - 1 - 1 - 1
1 - 1 - 1 - 0 - 1 - 1 - 1
1 - 1 - 1 - 1 - 0 - 1 - 1
1 - 1 - 1 - 1 - 1 - 0 - 1
1 - 1 - 1 - 1 - 1 - 1 - 0


etz ersetze ich die "0" durch die variable $a.
$s wird die stelle, die gerade überprüft wird.
$kaestchen ist ein array, bei dem am ende und bei korrekter ausführung jeweils die zahlen in nem unterarray stehen, die eine "1" hatten. (also in dem beispiel oben wäre $kaestchen[0] = (2,3,4,5,6,7), $kaestchen[1] = (1,3,4,5,6,7) usw)

das wäre dann der code dazu:

```
$meine_zahlen = array(1,2,3,4,5,6,7); 
$lottozahlen = array(1,2,3,4,5,6); 
$kaestchen = array(); 

//7 aus 49: 
$k = "0"; 
for($a="0";$a<="6";$a++) 
{ 
    for($s="0";$s<="6";$s++) 
    { 
        if($a != $s) 
        { 
            $kst[$k][] = $meine_zahlen[$s]; 
        } 
    } 
    $k++; 
}
```

so
etz kreuzen wir mal 8 zahlen an ... nehmen wir einfach 1,2,3,4,5,6,7 und 8
das sieht dann so aus:

1 - 2 - 3 - 4 - 5 - 6 - 7 - 8
0 - 0 - 1 - 1 - 1 - 1 - 1 - 1
0 - 1 - 0 - 1 - 1 - 1 - 1 - 1
0 - 1 - 1 - 0 - 1 - 1 - 1 - 1
0 - 1 - 1 - 1 - 0 - 1 - 1 - 1
0 - 1 - 1 - 1 - 1 - 0 - 1 - 1
0 - 1 - 1 - 1 - 1 - 1 - 0 - 1
0 - 1 - 1 - 1 - 1 - 1 - 1 - 0
1 - 0 - 0 - 1 - 1 - 1 - 1 - 1
1 - 0 - 1 - 0 - 1 - 1 - 1 - 1
1 - 0 - 1 - 1 - 0 - 1 - 1 - 1
1 - 0 - 1 - 1 - 1 - 0 - 1 - 1
1 - 0 - 1 - 1 - 1 - 1 - 0 - 1
1 - 0 - 1 - 1 - 1 - 1 - 1 - 0
1 - 1 - 0 - 0 - 1 - 1 - 1 - 1
1 - 1 - 0 - 1 - 0 - 1 - 1 - 1
1 - 1 - 0 - 1 - 1 - 0 - 1 - 1
1 - 1 - 0 - 1 - 1 - 1 - 0 - 1
1 - 1 - 0 - 1 - 1 - 1 - 1 - 0
1 - 1 - 1 - 0 - 0 - 1 - 1 - 1
1 - 1 - 1 - 0 - 1 - 0 - 1 - 1
1 - 1 - 1 - 0 - 1 - 1 - 0 - 1
1 - 1 - 1 - 0 - 1 - 1 - 1 - 0
1 - 1 - 1 - 1 - 0 - 0 - 1 - 1
1 - 1 - 1 - 1 - 0 - 1 - 0 - 1
1 - 1 - 1 - 1 - 0 - 1 - 1 - 0
1 - 1 - 1 - 1 - 1 - 0 - 0 - 1
1 - 1 - 1 - 1 - 1 - 0 - 1 - 0
1 - 1 - 1 - 1 - 1 - 1 - 0 - 0

puh 
so
das sind 24 "kästchen" mit je 6 zahlen, die sich daraus ergeben

da wir nun eine "0" mehr haben kommt neben dem $a noch ein $b dazu...
$s / $kaestchen bleibt gleich

dann sieht das so aus:


```
$meine_zahlen = array(1,2,3,4,5,6,7,8);
$lottozahlen = array(1,2,3,4,5,6);
$kaestchen = array();

//8 aus 49: 
$k = "0"; 
for($a="0";$a<="6";$a++) 
{
    for($b=$a+1;$b<="7";$b++) 
    {
        for($s="0";$s<="7";$s++) 
        { 
            if($a != $s AND $b != $s) 
            { 
                $kaestchen[$k][] = $meine_zahlen[$s]; 
            } 
        } 
        $k++; 
    }
}
```


so
das script setzt die 2 anfangs"0"en auf platz 0 und 1 ... die stelle, die überprüft wird is anfangs auch auf platz 0 und deshalb wird der platz 0 (zahl 1) nicht mit in das kästchen übernommen ... 
dann erhöht sich die "stelle" (die überprüft wird) immer um 1 ... dann is sie bei dem wert 2 (irgendwann) angelangt und da $a (0) != $s (2) und $b (1) != $s (2) zutrifft wird in das array $kästchen[0] der wert $meine_zahlen[2] übernommen. und so weiter und so fort... 

ich hoffe, dass meine erklärung diesmal verstanden wurde.

ETZ (endlich *gg*) die frage:
wie man sieht braucht man pro "0" die mehr im kästchen ist 1 schleife mehr ... diese müssen allerdings verschachtelt werden... ist es irgendwie möglich (bzw wie ist es möglich) diese variabel zu verschachteln

also das ich zb. 3 eingebe und dann 3 ineinander verschachtelte schleifen kommen... 
thx für jede antwort

cu 
gunny


----------



## Sven Petruschke (13. Februar 2004)

Ich kann mich in Dein Problem nicht hinein versetzen. Auf den ersten Blick sieht es so aus, als ob Du eine komplizierte Art verwendest, um Deine Daten zu sichern. Vielleicht beschreibst Du, was Du speziell erreichen möchtest.

mfg, snuu


----------



## aquasonic (13. Februar 2004)

Entweder du definierst eine maximale Anzahl Zaheln und machst dann die maximale Anzahl an Schleifen oder du machst das mit einer rekursiven Funktion (würde ich jetzt mal so sagen).

Ansonsten wäre mir keine Lösung bekannt...


----------

