Just nu i M3-nätverket
Jump to content

Loop-problem (lång kod)


Dahlgren

Recommended Posts

Nu har jag suttit i flera timmar och försökt att klura ut hur jag ska kunna "översätta" alla dessa If-satser till en loop men utan framgång:

 

Här är alla If-satser:

 

    If($matrix_array[0] == 1) {
     imageLine($pic, 20, 20, 20, 20, $black);     // A to B
   }

   If($matrix_array[1] == 1) {
     imageLine($pic, 20, 20, 475, 20, $black);     // A to B
   }

   If($matrix_array[2] == 1) {
     imageLine($pic, 20, 20, 20, 475, $black);     // A to B
   }

   If($matrix_array[3] == 1) {
     imageLine($pic, 20, 20, 475, 475, $black);     // A to B
   }

   If($matrix_array[4] == 1) {
     imageLine($pic, 475, 20, 20, 20, $black);     // A to B
   }

   If($matrix_array[5] == 1) {
     imageLine($pic, 475, 20, 475, 20, $black);     // A to B
   }

   If($matrix_array[6] == 1) {
     imageLine($pic, 475, 20, 20, 475, $black);     // A to B
   }

   If($matrix_array[7] == 1) {
     imageLine($pic, 475, 20, 475, 475, $black);     // A to B
   }

   If($matrix_array[8] == 1) {
     imageLine($pic, 20, 475, 20, 20, $black);     // A to B
   }

   If($matrix_array[9] == 1) {
     imageLine($pic, 20, 475, 475, 20, $black);     // A to B
   }

   If($matrix_array[10] == 1) {
     imageLine($pic, 20, 475, 20, 475, $black);     // A to B
   }

   If($matrix_array[11] == 1) {
     imageLine($pic, 20, 475, 475, 475, $black);     // A to B
   }

   If($matrix_array[12] == 1) {
     imageLine($pic, 475, 475, 20, 20, $black);     // A to B
   }

   If($matrix_array[13] == 1) {
     imageLine($pic, 475, 475, 475, 20, $black);     // A to B
   }

   If($matrix_array[14] == 1) {
     imageLine($pic, 475, 475, 20, 475, $black);     // A to B
   }

   If($matrix_array[15] == 1) {
     imageLine($pic, 475, 475, 475, 475, $black);     // A to B
   }

 

Det här är alltså ett script som ska rita en graf utifrån en matris som användaren matar in. Det är inte så relevant att tala om vad det här är till utan problemet är att få loopen att bete sig på följande sätt:

 

20, 20, 20, 20

20, 20, 475, 20

20, 20, 20, 475

20, 20, 475, 475

475, 20, 20, 20

475, 20, 475, 20

475, 20, 20, 475

475, 20, 475, 475

20, 475, 20, 20

20, 475, 475, 20

20, 475, 20, 475

20, 475, 475, 475

475, 475, 20, 20

475, 475, 475, 20

475, 475, 20, 475

475, 475, 475, 475

 

Är det någon som vet hur man skulle kunna göra?

 

Mvh

 

Link to comment
Share on other sites

Du kan ju gå igenom arrayen med till exempel en foreach loop och på så sätt via en switch kolla om det är en etta i arrayen eller inte:

 

foreach ($matrix_array as $tmp) {
switch($tmp) {
	case 1:
		// Gör det du ska göra om det är en etta
	Break;

	default:
		// Gör det du ska göra om det itne är en etta
	Break;
}
}

Dock lär ju detta inte funka då du har hårdkodade ImageLine värden.

 

Var det nåt sånt du menade? Jag tror att vi behöver lite mer info om var du får värdena ifrån eller om de nu verkligen är hårdkodade för att kunna hjälpa dig ytterliggare.

 

--

Some say I am crazy.. but the Voices in my head disagree...

 

Link to comment
Share on other sites

Som Bj0rn säger så går det inte att göra en loop med värderna i, då detta är en definitionsfråga.

Men du kan ju faktiskt abstrakta koden en del ändå, på så sätt att göra det enkelt för framtida modifieringar.

 

Så här skulle jag lägga upp det:

$a = 20; $b = 475;
$linjer[] = array($a,$a,$a,$a);
$linjer[] = array($a,$a,$b,$a);
$linjer[] = array($a,$a,$a,$;
$linjer[] = array($a,$a,$b,$;
$linjer[] = array($b,$a,$a,$a);
$linjer[] = array($b,$a,$b,$a);
$linjer[] = array($b,$a,$a,$;
$linjer[] = array($b,$a,$b,$;
$linjer[] = array($a,$b,$a,$a);
$linjer[] = array($a,$b,$b,$a);
$linjer[] = array($a,$b,$a,$;
$linjer[] = array($a,$b,$b,$;
$linjer[] = array($b,$b,$a,$a);
$linjer[] = array($b,$b,$b,$a);
$linjer[] = array($b,$b,$a,$;
$linjer[] = array($b,$b,$b,$;
for ($i = 0; $i < 16; $i++) {
if ($matrix_array[$i] == 1)
imageLine($pic, $linjer[$i][0], $linjer[$i][1], $linjer[$i][2], $linjer[$i][3], $black);
}

Dina värden är ju alla möjliga kombinationer av två värden på fyra platser. Det är möjligt att låta PHP sköta det jobbet, men då kommer du ju inte få just den numrering av värderna som du har just nu.

Om detta är något du kan leva med, så säg till så ska jag hjälpa dig med en sådan funktion.

 

[inlägget ändrat 2003-03-24 09:17:23 av Cariad]

Link to comment
Share on other sites

Hej!

 

Tack för alla svar. Jag har dock gjort på ett annat vis nu, om det är så speciellt smart vet jag inte.

 

Jag har placerat alla värden i arrayer, på följande vis:

 

$x1_array = Array(20,20,20,20,475,475,475,475,20,20,20,20,475,475,475,475);
 $x2_array = Array(20,20,20,20,20,20,20,20,475,475,475,475,475,475,475,475);
 $y1_array = Array(20,475,20,475,20,475,20,475,20,475,20,475,20,475,20,475);
 $y2_array = Array(20,20,475,475,20,20,475,475,20,20,475,475,20,20,475,475);

 For($i = 0; $i < $count_array; $i++) {
   If($matrix_array[$i] == 1) {
     imageLine($pic, $x1_array[$i], $x2_array[$i], $y1_array[$i], $y2_array[$i], $black);
   }
 }

 

Och på så sätt tagit bort alla If-satser.

 

Mvh

 

[inlägget ändrat 2003-03-24 12:10:35 av Gren]

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...