Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : kleines Schfeifen Problem



dml
04-11-2010, 10:57
Hi!

Ich habe momentan ein kleines Schleifenproblem und komme nicht auf die Idee es zu lösen, deshalb wolte ich Euch um Eure Unterstützug bitten.

Ich habe mehrere geschachtelte Schleifen:


for(int i=0; i<sizeof(wert_a); i++){
for(int j=0; j<sizeof(wert_a[i]); j++){
str += wert_a[i][j];
for(int m=0; m<sizeof(wert_x); m++){
for(int n=0; n<sizeof(wert_x[m]); n++){
str += wert_a[m][n];
}
}
}
}
...

Das funktioniert auf eigentlich ganz gu, wenn ich mich nicht verschrieven habe. ;)

Mein Problem dabei ist, wie kann ich dabei einen Bereich auslassen z.B.:


if(isset(wert_a)){
for(int i=0; i<sizeof(wert_a); i++){
for(int j=0; j<sizeof(wert_a[i]); j++){
str += wert_a[i][j];
}

for(int m=0; m<sizeof(wert_x); m++){
for(int n=0; n<sizeof(wert_x[m]); n++){
str += wert_a[m][n];
}
}
}
}
...


Mir fällt da leider zur Zeit keine Idee ein.

jeebee
04-11-2010, 17:22
Mir ist nicht ganz klar was du genau haben willst, aber wenn du nicht gesetzte value_a's ganz ignorieren willst, kannst du folgendes machen:

for(int i=0; isset(wert_a) && i<sizeof(wert_a); i++){
for(int j=0; j<sizeof(wert_a[i]); j++){
str += wert_a[i][j];
for(int m=0; m<sizeof(wert_x); m++){
for(int n=0; n<sizeof(wert_x[m]); n++){
str += wert_a[m][n];
}
}
}
}

anda_skoa
05-11-2010, 09:56
Wenn ich deinen zweiten Codeblock richtig verstehe, willst du die inneren beiden Schleifen nur ausführen, wenn isset() nicht wahr ist.



for(int i=0; i<sizeof(wert_a); i++){
for(int j=0; j<sizeof(wert_a[i]); j++){
str += wert_a[i][j];

if (!isset(wert_a)){
for(int m=0; m<sizeof(wert_x); m++){
for(int n=0; n<sizeof(wert_x[m]); n++){
str += wert_a[m][n];
}
}
}

}
}


Ciao,
_

dml
05-11-2010, 10:15
Mein Fehler:
In Schleife 2 hätte es:

str += wert_x[m][n];
heissen müssen.
Hinzu gibt es davon 1...n Schleifen also


for(int i=0; i<sizeof(wert_a); i++){
for(int j=0; j<sizeof(wert_a[i]); j++){
str += wert_a[i][j];

for(int m=0; m<sizeof(wert_x); m++){
for(int n=0; n<sizeof(wert_x[m]); n++){
str += wert_x[m][n];

for(int o=0; o<sizeof(wert_y); o++){
for(int p=0; p<sizeof(wert_y[o]); p++){
str += wert_y[o][p];
}
}

}
}

}
}
...



Versuche es jetzt mit:



function loop($str,$n){

while(empty($ary[$n])){
$n++;
}

for($i=0; $i<$this->sicherheit; $i++){
// echo "i[$j]=".$i[$j]."\n";
for($j=0; $j<sizeof($ary[$n]); $j++){
// echo "\ti[$j]=".$i[$j]."\n";

switch($n){
case 1:
$str .=" --dport ".$ary[$n][$i][$j];
break;
case 2:
$str .=" --src ".$ary[$n][$i][$j];
break;
case 3:
$str .=" --dst ".$ary[$n][$i][$j];
break;
case 4:
$str .=" -j ".$ary[$n][$i][$j];
break;
}


loop($str,$n)

}
}
}

Noch ein bisschen .... , glaube aber der Weg ist gut.
Und vielen Dank für Eure Hilfe!

Das angehängte Skript ist auch noch nicht fertig, deshalb wirkt es jetzt noch sehr konfuse. Wenn es fertig ist stelle ich es hier hinein bei interesse.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Leider ist mir noch ein Problem dazwischen gekommen.
Ich habe den Algorithmus soweit fertig, doch möchte ihn jetzt in c++ umwandeln.
Einfach besser mit einem Pointer das Array zu durchlaufen. Doch leider besteht mein Array
in php aus mehreren unterschiedlichen Arrays:


/*
Array
(
[0] => 2
[1] => filter
[2] => FORWARD
[3] => tcp
[4] => Array
(
[0] => Array
(
[0] => 80
[1] => 443
)

)

[5] =>
[6] => Array
(
[0] => Array
(
[0] => 192.168.0.0/24
)

)

[7] => zulassen
)
*/


Wie kann ich dieses Problem jetzt lösen sodas ich das Array in einer dynamischen Schleife:

for(int i=0; i<sizeof(wert[n]); i++){
durchlaufen kann?.
Vielen Dank für Eure Hilfe! :)

Der Beste Ansatz den ich finden kann ist ein 3. dimensionaler Vector, doch zum Beispiel [0] => 2
ist doch nur eindimensional. struct hilft mir leider auch nicht, da ich die Elemente immer angeben muss mystuct.wert_a.

Das Ziel des Projektes ist dabei, auf Ereignisse dynamisch reagieren zu können. Falls es interessiert. ;)