Array-Verleich

Shinzo

Mitglied
Hallo,

ich habe die Suche benutzt, aber nicht das passendes gefunden, was mir weiterhelfen könnte.

Und zwar sollen Arrays, die in einer mySQL-Tabelle durch IDs sortiert sind, nacheinander mit einem bestimmten Array, was in einer anderen Tabelle ist verglichen werden. Soweit ist das kein Problem. Zweck der Sache: Auswertung von getippten Lottozahlen (pro Tipp: 4 Zahlen) mit den Zahlen der aktuellen Ziehung.

Die Arrays sind alle vor dem abspeichern sortiert worden.
Ich habe mir das jetzt so vorgestellt, das ich die einzelnen Tipps sowie die Ziehungszahlen in einer While-Schleife miteinander vergleiche. Kommt es zu Übereinstimung von 2 Zahlen, bekommt der User einen kleinen Gewinn gutgeschrieben, bei 3 Zahlen, die mit den Ziehungszahlen übereinstimmen einen größen, bei allen 4 gleichen Zahlen den Jackpot halt.

Problem: Mir fehlt die Funktion/Methode wie ich zwei Zahlenarrays (je 4 Zahlen) mit einander vergleiche. Als Resultat soll ein Wert rauskommen, der die Übereinstimmungen angibt, in dem Fall 1-4 Zahlen richtig getippt. (Prinzip: Lotto)

Ich hoffe es kann mir jemand mit einem Tipp/Ansatz weiterhelfen.

Danke im Voraus,
Mfg

Shinzo
 
Hallo,

mit array_diff( array1, array2) kannst du 2 Array's vergleichen, die Rückgabe sind alle Werte, welche im ersten aber nicht im 2ten array vorkommen.

Wenn du also als ersten Array deinen Jackpot übergibst und im 2ten den Tipp des Users, kannst du mit 4-count(array_diff( array1, array2)) die Anzahl der richtigen Tipps erhalten.

Beispiel:
PHP:
$a = array(2,5,7,9);  // Jackpot
$b = array(1,2,6,8);  // Tipp des Benutzers

$richtige = 4-count(array_diff($a,$b)); // Ergibt 1 weil nur die "2" richtig getippt wurde

Greetz
 
hm, kannst du bei 4 Zahlen nicht einfach mit ner for-Schleife die Arrays durchlaufen und die einzelwerte vergleichen (hmmm, beim Lotto kommts doch auf die Reihenfolge an, oder?)?
ungefähr so:
PHP:
$getippteZahlen = Array(6,3,17,23);
$gewinnZahlen = Array(5,3,2,23);
$count = count($gewinnZahlen);
$richtige = 0;
for ($i = 0; $i < $count; $i++) {
	if ($getippteZahlen[$i] == $gewinnZahlen[$i]) {
		$richtige++;
	}
}
echo $richtige.' aus '.$count.' ('.$richtige/$count.'%) richtige!';
wie du dann die gewinnsummen richtig verteilst, weist ich ned... hängt glaub ich beim Lotto davon ab, wieviele Leute was richtiges tippen, oder?

Edit: okay, siehs als zweite möglichkeit... array_diff ist in diesem fall wohl eleganter ;-)
 
Zuletzt bearbeitet von einem Moderator:
Danke schonmal für Eure beiden Antworten,
die Gewinnaufteilunge spielt keine Rolle, mir kommt es lediglich auf den Vergleich an. Bevor ich hier im Thread nach neuen Antworten geschaut habe, bin ich auf folgendes im Forum gestoßen:

PHP:
      $tmp=array();
      $anzahl=0;
      foreach($lottoZahlen as $a) {
           if(in_array($a, $lottoZahlen2) && !in_array($a, $tmp)) {
              $anzahl++;
              $tmp[]=$a;
          }
      }

Das kann man ohne Probleme in eine While-Abfrage-Schleife packen und bei 2/3/4 richtigen einen Gewinn gutschreiben (mit if $anzahl = 2, 3 oder 4).

Jetzt sehe ich das TheNova folgende Zeile geschrieben hat:

PHP:
$richtige = 4-count(array_diff($a,$b));

Ich habe es so eben ausprobiert, und ich komme ebenfalls auf das Ergebnis, was ich mir erhofft hatte.

Die Frage ist nun, arbeitet array_diff genau so gut wie die Prozedur darüber? Oder kann es zu Fehlvergleichen kommen?

Danke im Voraus
 
Ich wüsste nicht, was mit array_diff falsch laufen könnte... du kannst dir ja mal die beschreibung auf php.net ansehen (http://php.net/array_diff), da kannst du recht genau nachlesen, was array_diff macht...

Bei beiden Methoden spielt jetzt die Reihenfolge keine Rolle (is ja beabsichtig, oder?)... beim normalen Lotto soweit ich weis aber schon, oder?
 
@Bailor nein das spielt keine Rolle ;-) Hast du schon mal einen Lotto-Schein gesehen ? Wie soll man da die Reihenfolge angeben :p
Ich denke mal das ist schon schwer genug 6 aus 49 zu bekommen ;)
Kannst dir ja die Wahrscheinlichkeit ausrechnen

Code:
 // ohne Zusatzzahl
 (6 über 6) * (43 über 0) / (49 über 6) ca. 14Millionen

mfg
 
hehe, da sind ja die 6 kästchen auch in irgendeiner Reihenfolge auf dem Blatt...
naja, ich hab ja noch nie lotto gespielt; danke für die aufklärung... ;-)
 
Zurück