Values in Arrays vergleichen und den dazugehörigen Key ausgeben

Karlzberg

Erfahrenes Mitglied
Hallo,

ich bringe mir gerade selbst PHP bei, was ich eigentlich mit einem größeren Projekt vorhatte. Nun habe ich aber zunächst ein kleineres Projekt vorgeschoben, steinigt mich als bitte nicht für Anfängerfehler ;)

Ich möchte gerne eine Pokerstatistik erstellen. Für bestimmte Plätze werden dabei unterschiedliche Punkte vergeben. Die Platzierungen werden über ein Formular an ein weiterverabeitendes Script gesendet, welches später die daraus ermittelten Daten an eine Datenbank übergeben soll.

Die Platzierungen werden in dem Formular in die Variablen der Namen eingetragen, welche im Script dann zu einem Array zusammengefasst werden.
Als nächstes wird dann anhand der Teinehmerzahl errechnet, wieviel Punktplätze es überhaupt gibt.
Die Errechnung der Punktzahl ist dynamisch, sie errechnet sich aus der Anzahl der Mitspieler und dem Einsatz pro Mitspieler.
Ein Beispiel wäre also, dass es 4 Punktplätze gibt, deren Punkte sich z.b. so aufteilen:
1.) 400 Punkte
2.) 300 Pkt.
usw...

Nun möchte ich gerne Vergleichen, welcher Spieler aus dem ersten array wieviele Punkte bekommt. Mein Code sieht bis dato wie folgt aus:

Code:
<html>

<body>

<?PHP

// variablen aus dem statistikformular
$mitspieler = $_POST["mitspieler"];
$einsatz = $_POST["einsatz"];
$spieler1 = $_POST["spieler1 "];
$spieler2 = $_POST["spieler2 "];
$spieler3 = $_POST["spieler3 "];
$spieler4 = $_POST["spieler4 "];
$spieler5 = $_POST["spieler5 "];
$spieler6 = $_POST["spieler6 "];
$spieler7 = $_POST["spieler7 "];
$spieler8 = $_POST["spieler8 "];
$platznamen = array ($spieler1 , $spieler2 , $spieler3 , $spieler4 , $spieler5 , $spieler6 , $spieler7 , $spieler8 ); 

// terme zum weiterrechnen
$plaetze = $mitspieler / 2.5;
$multi = $einsatz * 20;
$endmulti = $multi * $plaetze;

// anzahl der plätze, Punkte pro Platz
$b = array();
for ($a = 0; $a <= $plaetze; $a++)
    {
   $b[] = $a * $multi  ;
   echo "<pre>\n"; //dient nur zur kontrolle, kann also wieder gelöscht werden
    print_r($b); //dient nur zur kontrolle, kann also wieder gelöscht werden
    echo "</pre>\n"; //dient nur zur kontrolle, kann also wieder gelöscht werden
    }

 ?>

 
</body>

</html>

Nun sollen die Arrays $platznamen und $b miteinander verglichen werden, um die Platzierung jedes Spielers mit der Punktzahl zu überschreiben.
Z.B. hätte Spieler1 Platz eins erreicht. Momentan stünde dort also eine 1. Für den ersten Platz gäbe es nun 400 Punkte, also das, was im Array b für die 1 steht.
Dadurch sollte der Inhalt der Variablen Spieler1 durch die 400 überschrieben werden.

Ich hoffe, es ist klar geworden, was ich meine?!
Wie stelle ich das also nun am besten an?
 
Guten Morgen Karlzberg

Bin jetzt nicht ganz sicher, ob ich dein Problem richtig verstanden habe. Ich hoff darum, dass ich dir ein passendes Codeschnippsel vorlegen kann :)

PHP:
<?php
	$platzierung = Array(1, 3, 4, 2);	//Array Index folgend. Hier Platz 1 -> Spieler 1, Platz 2 -> Spieler 3, etc.

	$punkte = Array(400, 300, 200, 100);	//Für Platz 1 --> 400 Pt, für Platz 2 --> 300 pt, etc.

	foreach($platzierung AS $key => $val)	{
		$merge['Spieler'.$val] = $punkte[$key];
	}

	print_r($merge);
?>

Das Array $platzierung ergibt sich bei dir ja aus dem Formular über die $_POST-Felder und das Punkte-Array generierst du mit der for-Schleife.
Ich bin jetzt mit einer foreach-Schleife durch das Platzierungsarray gewandert und hab schlussendlich einen Hash generiert, der als Key "Spieler1" bis "Spieler 4" und als zugehörigen Wert die Anzahl verdienter Punkte hat.

Ich hoffe dir etwas weitergeholfen zu haben.

Gruss
De Igäl
 
Hi,
also ganz klar geworden ist es mir ehrlich gesagt nicht :confused: .

Vielleicht kannst du nochmal ganz genau erläutern wie du es gerne haben möchtest.
Schritt für Schritt. Weil der Text doch relativ confused ist ^^.

Aber ich versuche trotzdem mal deinem Text zu folgen.
Du hast also im $Spieler1 - $SpielerX jetz stehen "1." , "2." für die Platzierungen.
In deinem Array b steht. das wenn Platz 1. ist, dann bekommt der jenige 400 Punkte Platz 2 200 Punkte Etc.

Und du möchtest dann, dass die 1. Durch die 400 Punkte ersetzt werden.
Sprich
vorher: $Spieler1 = 1.
nachher $Spieler1 = 400.

Mfg Chris
 
Hallo,

erstmal danke für die Antworten.
@wolf: Du hast es erfasst :)
Im Endeffekt soll es also so aussehen, dass ich im Array Platznamen die über POST ermittelte Platzierung durch die dafür in diesem Script ermittelte Punktzahl ersetze.
So dass ich die Punktzahl für den jeweiligen dann in die Tabelle eintragen kann.

Übrigens habe ich den Inhalt des Arrays b noch ein wenig umgeschrieben, so dass dort die Punkte nun absteigend reingeschrieben werden:

Code:
// anzahl der plätze, Punkte pro Platz
$b = array();
for ($a = 0; $a <= $plaetze; $a++)
    {
   $b[] = $endmulti - $multi * $a ;
   echo "<pre>\n"; //dient nur zur kontrolle, kann also wieder gelöscht werden
    print_r($b); //dient nur zur kontrolle, kann also wieder gelöscht werden
    echo "</pre>\n"; //dient nur zur kontrolle, kann also wieder gelöscht werden
    }

Ein klein wenig bringt mich der Code von Igäl schon weiter. Allerdings brauche ich für die Datenbankanbindung die Punktzahl hinter den Namen der Spieler. Mit der Spielernummer wird es zu unübersichtlich.
Um es anders auszudrücken: Im Array Platznamen stehen nicht "Spieler1, Spieler2, etc.", sondern die die Namen der entsprechenden Spieler. Ausserdem sollen die null Punkte nicht eingetragen werden.

Falls jemand zu diesem Thema noch ein passendes Tutorial parat hat, wäre ich darüber ebenfalls sehr dankbar. Die, die ich bisher gefunden habe, konnte ich nicht auf mein Projekt anwenden.

edit: Das Problem mit der null hat sich schon wieder erledigt. Die wird nun nicht mehr in die Punkte eingetragen.
 
Hab mein Problem jetzt auf andre Art gelöst:


PHP:
//eintrag in die db
foreach($platznamen AS $key => $val)   //durchlauf durch das array 
       //prüfung, ob für den jew. spieler punkte eingetragen werden und ob der spieler überhaupt in die db kommt
        if ($val <= $plaetze AND $val > 0) 
            {
               $punkte = $endmulti - $val * 100;//punkteberechnung
               $name = $key; //umwandlung des keys in eine variable
               
               echo $name.": ".$punkte."<br/>"; //dient nur der kontrolle, kann gelöscht werden
               //punkteeintrag in die db               
               $eintrag = "INSERT INTO

               tabellenname(name, punkte )
               VALUES('$name', '$punkte')";
                $eintragen = mysql_query($eintrag);
  
                if($eintragen == true)
                  {
                   echo "Eintrag war erfolgreich";
                  }
                else
                   {
                    echo "Fehler beim Speichern";
                   }

                echo "Fehler: ".mysql_error();
                                              
              }  
          else
              {
               if ($val > 0) //falls eine platzierung angegeben ist, für die es aber keine punkte gibt
                  {
                   $punkte = ""; 
                   $name = $key;
                 
                   echo $name.": ".$punkte."<br/>"; //dient nur der kontrolle, kann gelöscht werden
                   //leerer punkteeintrag in die db
                   $eintrag = "INSERT INTO

                   tabellenname(name, punkte )
                   VALUES('$name', '$punkte')";
                   $eintragen = mysql_query($eintrag);
  
                   if($eintragen == true)
                   {
                   echo "Eintrag war erfolgreich";
                   }
                   else
                   {
                    echo "Fehler beim Speichern";
                   }

                   echo "Fehler: ".mysql_error();
                  }                                    
              }
             
      ;

Jetzt wird also kein zweites Array durch eine Berechnung erstellt, sondern die Ergebnisse direkt in die DB eingetragen.
 
Zuletzt bearbeitet:
Zurück