Alexander44564: Mehere Arrays multiplizieren

Ich habe einen Array, der mehrere Arrays mit jeweils 8 Zahlen enthält. Nun möchte ich jede Zahl mit dem Index 0 mit allen anderen Zahlen mit dem Index 0 multiplizieren. Und das ganze dann mit den Zahlen mit dem Index 1, und denen mit dem Index 2,3,4,5,6,7.

Ich habe dass so versucht, aber es funktioniert nicht.

for ($s = 0; $s < strlen($key); $s++) {  
		 $arr_zwresult = $arr_result.($s+1)  
		 $$arr_zwresult = array();  
		  
		 if ($s < 1) {  
			 $arr_result.($s+1)[0] = $arr_save[0][0] * $arr_save[1][0];  
			 $arr_result.($s+1)[1] = $arr_save[0][1] * $arr_save[1][1];  
			 $arr_result.($s+1)[2] = $arr_save[0][2] * $arr_save[1][2];  
			 $arr_result.($s+1)[3] = $arr_save[0][3] * $arr_save[1][3];  
			 $arr_result.($s+1)[4] = $arr_save[0][4] * $arr_save[1][4];  
			 $arr_result.($s+1)[5] = $arr_save[0][5] * $arr_save[1][5];  
			 $arr_result.($s+1)[6] = $arr_save[0][6] * $arr_save[1][6];  
			 $arr_result.($s+1)[7] = $arr_save[0][7] * $arr_save[1][7];  
		 } else {  
			 $arr_result.($s+1)[0] = $arr_result.$s[0] * $arr_save[$s+1][0];  
			 $arr_result.($s+1)[1] = $arr_result.$s[1] * $arr_save[$s+1][1];  
			 $arr_result.($s+1)[2] = $arr_result.$s[2] * $arr_save[$s+1][2];  
			 $arr_result.($s+1)[3] = $arr_result.$s[3] * $arr_save[$s+1][3];  
			 $arr_result.($s+1)[4] = $arr_result.$s[4] * $arr_save[$s+1][4];  
			 $arr_result.($s+1)[5] = $arr_result.$s[5] * $arr_save[$s+1][5];  
			 $arr_result.($s+1)[6] = $arr_result.$s[6] * $arr_save[$s+1][6];  
			 $arr_result.($s+1)[7] = $arr_result.$s[7] * $arr_save[$s+1][7];  
		 }  
	 }  
	  
	 var_dump($arr_result.(strlen($key));

Gibt es da eine einfachere/bessere Möglichkeit oder wo liegt mein Fehler?

  1. Hi!

    Ich habe einen Array, der mehrere Arrays mit jeweils 8 Zahlen enthält. Nun möchte ich jede Zahl mit dem Index 0 mit allen anderen Zahlen mit dem Index 0 multiplizieren. Und das ganze dann mit den Zahlen mit dem Index 1, und denen mit dem Index 2,3,4,5,6,7.

    Wie soll das Ergebnis konkret aussehen?

    Ich habe dass so versucht, aber es funktioniert nicht.

    "Funktioniert nicht" funktioniert nicht als Fehlerbeschreibung. Bitte beobachte und beschreibe genauer. Was erwartest du an welcher Stelle konkret, was bekommst du stattdessen?

      	 $arr\_result.($s+1)[0] = $arr\_save[0][0] \* $arr\_save[1][0];  
    

    Der Punkt ist der Stringverknüpfungsoperator, dessen Ergebnis ist ein String. Einem String kann man nichts zuweisen. Auch dieser Ausdruck ($s+1)[0] ergibt nur einen Syntaxfehler. Warum sagst du das nicht gleich? Bitte lass deine potentiellen Helfer nicht Rätselraten.

    Ansonsten lassen sich variable Variablen meist vermeiden, indem man sie durch ein Array ersetzt. Dieses lässt sich anschließend leichter handhaben als ein Sack voll einzelne Variablen.

    Lo!

  2. Hallo,

    Ich habe einen Array, der mehrere Arrays mit jeweils 8 Zahlen enthält. Nun möchte ich jede Zahl mit dem Index 0 mit allen anderen Zahlen mit dem Index 0 multiplizieren. Und das ganze dann mit den Zahlen mit dem Index 1, und denen mit dem Index 2,3,4,5,6,7.

    also beispielhaft:
     $a[0] = array(17, 22, 87,  2, 12, 60, 42,  4);
     $a[1] = array( 3, 14,  0, 15, 33,  1, 24, 16);
     $a[2] = array( 2, 12, 91, 17,  0, 51, 12, 18);

    Nun soll also $p[0]=102 (=17*3*2) sein, $p[1]=3696 (=22*14*12), $p[2]=0 (=87*0*91) usw.

    Habe ich das soweit richtig verstanden?

    Ich habe dass so versucht, aber es funktioniert nicht.

    "Funktioniert nicht" ist keine Aussage. Interessanter als der Code ist das, was du dir dabei gedacht hast und idealerweise als Kommentar dazu hättest notieren sollen.

    for ($s = 0; $s < strlen($key); $s++) {

    Geht schon los: Wo kommt $key her? Was hat ein String mit deiner oben beschriebenen Aufgabenstellung zu tun?

       $arr\_zwresult = $arr\_result.($s+1)  
       $$arr\_zwresult = array();  
    

    Autsch. "Variable Variablen", ein Konzept, das man fast immer eleganter durch Arrays ersetzen kann.

       if ($s < 1) {  
      	 $arr\_result.($s+1)[0] = $arr\_save[0][0] \* $arr\_save[1][0];  
      	 $arr\_result.($s+1)[1] = $arr\_save[0][1] \* $arr\_save[1][1];  
      	 $arr\_result.($s+1)[2] = $arr\_save[0][2] \* $arr\_save[1][2];  
      	 $arr\_result.($s+1)[3] = $arr\_save[0][3] \* $arr\_save[1][3];  
      	 $arr\_result.($s+1)[4] = $arr\_save[0][4] \* $arr\_save[1][4];  
      	 $arr\_result.($s+1)[5] = $arr\_save[0][5] \* $arr\_save[1][5];  
      	 $arr\_result.($s+1)[6] = $arr\_save[0][6] \* $arr\_save[1][6];  
      	 $arr\_result.($s+1)[7] = $arr\_save[0][7] \* $arr\_save[1][7];  
    

    Hier ist (auf den ersten Blick unsichtbar) die zweite Schleife, die ich vermisst habe.

    var_dump($arr_result.(strlen($key));

    Was bekommst du hier am Schluss?

    Gibt es da eine einfachere/bessere Möglichkeit oder wo liegt mein Fehler?

    Du gehst ziemlich konfus und scheinbar unüberlegt vor.

    So long,
     Martin

    --
    Der Alptraum jedes Computers:
    "Mir war, als hätte ich gerade eine 2 gesehen."
  3. Hello,

    wenn Du das array passend aufgebaut hättest, könntest Du zumindest schon mal die Funktion aray_product() http://de.php.net/manual/en/function.array-product.php benutzen, und diese dann in einer foreach()-Schleife einsetzen.

    Das würde Dir ersparen, vorher zu prüfen, ob die Faktoren überhaupt vorhanden sind.
    Das müsstest Du nämlich tun, wenn Du die Struktur nicht wirklich verlässlich ist, weil sie z.B. aus einer externen Datenquelle stammt.

    Foreach() und array_product() übernehmen diese Funktionalität quasi implizit, weil sie die Elemente nicht über den Index adressieren, sondern die interne Struktur ablaufen.

    Dazu müsstest Du Dein Array anders herum aufbauen.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de