mikikado1: Multi-Array Mischen

Ich habe mit dem Mischen von Arrays ein Problem.

Es geht um folgendes: Ich habe ein "Quiz". Die Antworten sind in Arrays so wie im nachfolgenden Beispiel:

quest[1][1] ="1"
quest[1][2] ="What's blue?"
quest[1][3] ="The Sky is blue!"
quest[1][4] ="Spanish blue eyes"
quest[1][5] ="Drinking too much too"

.....

quest[30][1]="30"
quest[30][2]="What tweets?"
quest[30][3]="Usually birds"
quest[30][4]="Twitter too"
quest[30][5]="Sometimes my brain"

Die "Strings" hier sollen nur Beispiele sein!

Ich habe im Netz Beispiele zum mischen eines Arrays gefunden. Z.B.: Für Karten mischen!

for (var i=0; i<13; i++)
       for (var j=0; j<4; j++) {
karte = kartenname[j] + " " + farben [i]
cards.push(karte);
}
// shuffle
var neu = new array();
while (cards.length > 0) {
var zufall = math.floor(math.random() * cards.length);
karte = cards[zufall];
cards.splice(zufall,1);
neu.push(karte);
}

Ich habe im Moment anscheinend "Baum-Wald-Syndrom". Konnte das Beispiel einfach nicht auf meine Bedürfnisse anpassen. Kann jemand mir helfen und aufzeigen wie ich das mischen mit den Multi-Arrays hinbekomme bzw. den Code den ich gefunden habe umschreiben helfen?

Danke im Voraus.

Hg Michael

  1. Ahoi mikikado1

    $testArr[0][0] = "abc00";
    $testArr[0][1] = "abc01";
    $testArr[1][0] = "abc10";
    $testArr[1][1] = "abc11";
    $allArr = array();
    foreach ($testArr as $subArr) {
    	$allArr = array_merge($allArr, $subArr);
    }
    var_dump($allArr);
    shuffle($allArr);
    var_dump($allArr);
    

    gibt u.a.:

    array(4) { [0]=> string(5) "abc00" [1]=> string(5) "abc01" [2]=> string(5) "abc10" [3]=> string(5) "abc11" } array(4) { [0]=> string(5) "abc11" [1]=> string(5) "abc01" [2]=> string(5) "abc00" [3]=> string(5) "abc10" }

    Dank und Gruß,

    bob from berlin

    1. $testArr[0][0] = "abc00"; $testArr[0][1] = "abc01"; $testArr[1][0] = "abc10"; $testArr[1][1] = "abc11"; $allArr = array(); foreach ($testArr as $subArr) { $allArr = array_merge($allArr, $subArr); } var_dump($allArr); shuffle($allArr); var_dump($allArr);

      funzt nicht! Lt. Online Tool gibt es ein Fehler: http://prntscr.com/6p09lq

      Ich muss ja die zugehörigen Arrays ebenfalls in der selben Reihenfolge mischen!

      D.h. quest[20][1] bis quest[20][5] zusammen usw. (z.B. auch: quest[15][1] bis quest[15][5])

      die Reihenfolge darf dabei nicht durcheinander kommen. Ich will in etwa so:

      For (m=1; m<22; m++) {
      	
      		rnd=Math.floor((Math.random() * 22) + 1); 
      	
      		frage[m][1] = quest[rnd][1];
      		frage[m][2] = quest[rnd][2];
      		frage[m][3] = quest[rnd][3];
      		frage[m][4] = quest[rnd][4];
      		frage[m][5] = quest[rnd][5];
      		
      	}
      

      aber wie verhindere ich , dass rnd nur einmal vorkommt??

      Das ist mein Problem!

      Hg Michael

      1. Ahoi mikikado1

        $testArr[0][0] = "abc00"; $testArr[0][1] = "abc01"; $testArr[1][0] = "abc10"; $testArr[1][1] = "abc11"; $allArr = array(); foreach ($testArr as $subArr) { $allArr = array_merge($allArr, $subArr); } var_dump($allArr); shuffle($allArr); var_dump($allArr);

        funzt nicht! Lt. Online Tool gibt es ein Fehler: http://prntscr.com/6p09lq

        Natürlich funzt es, sonst hätte ich ja keine Ausgabe erhalten.

        Ich muss ja die zugehörigen Arrays ebenfalls in der selben Reihenfolge mischen!

        Du willst mischen aber die Reihenfolge behalten? Dann mische die Arrays doch einzeln. Aber mit shuffle.

        aber wie verhindere ich , dass rnd nur einmal vorkommt??

        Du willst verhindern, dass rnd nur einmal vorkommt? Ich glaube, dein Ansazt, selbst zu shufflen ist ungünstig. Kann man machen, ist aber umständlicher als mit Shuffle.

        Bau Dir mal eine kleine Testumgebung wie ich, und mach es damit, bis es "funzt".

        Dank und Gruß,

        bob from berlin

        1. Ahoi frankx

          funzt auch!

          <?php
          $testArr[0][0] = "abc00";
          $testArr[0][1] = "abc01";
          $testArr[0][2] = "abc02";
          $testArr[1][0] = "abc10";
          $testArr[1][1] = "abc11";
          $testArr[1][2] = "abc12";
          $allArr = array();
          foreach ($testArr as $subArr) {
                  $allArr = array_merge($allArr, $subArr);
                  shuffle($subArr);
                  var_dump($subArr);
          }
          var_dump($allArr);
          shuffle($allArr);
          var_dump($allArr);
          

          gibt:

          array(3) { [0]=> string(5) "abc01" [1]=> string(5) "abc02" [2]=> string(5) "abc00" } array(3) { [0]=> string(5) "abc10" [1]=> string(5) "abc12" [2]=> string(5) "abc11" } array(6) { [0]=> string(5) "abc00" [1]=> string(5) "abc01" [2]=> string(5) "abc02" [3]=> string(5) "abc10" [4]=> string(5) "abc11" [5]=> string(5) "abc12" } array(6) { [0]=> string(5) "abc12" [1]=> string(5) "abc10" [2]=> string(5) "abc01" [3]=> string(5) "abc00" [4]=> string(5) "abc11" [5]=> string(5) "abc02" }

          Dank und Gruß,

          bob from berlin

  2. Tach!

    Ich habe mit dem Mischen von Arrays ein Problem.

    Welches?

    Ich habe im Moment anscheinend "Baum-Wald-Syndrom". Konnte das Beispiel einfach nicht auf meine Bedürfnisse anpassen.

    Was genau sind denn deine Bedürfnisse - bezüglich des Arrays?

    Kann jemand mir helfen und aufzeigen wie ich das mischen mit den Multi-Arrays hinbekomme bzw. den Code den ich gefunden habe umschreiben helfen?

    Der Schlüssel zum Erfolg ist zunächst einmal eine konkrete Beschreibung des Problems. Wenn du die genau genug formuliert hast, ist das schon sehr nah an einem Programmablaufplan.

    Also was soll mit den Arrays geschehen - zum einen mit dem äußeren und zum anderen mit den inneren?

    dedlfix.

  3. @@mikikado1

    Ich habe mit dem Mischen von Arrays ein Problem.

    Es geht um folgendes: Ich habe ein "Quiz". Die Antworten sind in Arrays so wie im nachfolgenden Beispiel:

    quest[1][1] ="1"
    quest[1][2] ="What's blue?"
    quest[1][3] ="The Sky is blue!"
    quest[1][4] ="Spanish blue eyes"
    quest[1][5] ="Drinking too much too"
    
    .....
    
    quest[30][1]="30"
    quest[30][2]="What tweets?"
    quest[30][3]="Usually birds"
    quest[30][4]="Twitter too"
    quest[30][5]="Sometimes my brain"
    

    Und was genau willst du mischen? Nur die Fragen, d.h. das äußere Array? Oder die Antworten, d.h. das innere Array?

    Mir scheint auch deine Datenstruktur suboptimal zu sein. Ich würde das innere nicht per Index, sondern mit Namen "id" (Warum bei dir ein String anstatt numerisch? Und wozu bauchst du das überhaupt?), "q"(uestion) und "a"(nswers) ansprechen; außerdem die Antwortmöglichkeiten in ein eigenes Array stecken:

    $quiz = array(
      array(
        'id' => 1, //
        'q'  => 'What’s blue?',
        'a'  => array(
          'The Sky is blue!',
          'Spanish blue eyes',
          'Drinking too much too'
        )
      ),
    // ⋮
      array(
        'id' => 30,
        'q'  => 'What tweets?',
        'a'  => array(
          'Usually birds',
          'Twitter too',
          'Sometimes my brain'
        )
      )
    );
    

    Übrigens hat „to be blue“ im Englischen eine völlig andere Bedeutung als „blau sein“ im Deutschen.

    LLAP

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)