2016-08-11 4 views
0

I-Arrays als Schlüssel mit Schlüsseln bin mit Verwendung auf ein Array, in dem unten stehenden Code wie,ein Array mit einem Schlüssel als Array Schlüssel

 $team = array(); 
     $counter = 0; 

     $sql = "SELECT Home, Away, Result, Points FROM schedule"; 
     $schedulequery = mysqli_query($conn, $sql); 

     // divy out the points 
     if (mysqli_num_rows($schedulequery) > 0) { 
      while($teamrow = mysqli_fetch_assoc($schedulequery)) { 

       $points = $teamrow["Points"]; 
       if ($teamrow["Result"] == "Home"){ 
        $team[$teamrow["Home"]] = $team[$teamrow["Home"]] + $points; 
       } 
       if ($teamrow["Result"] == "Tie"){ 
        $team[$teamrow["Home"]] = $team[$teamrow["Home"]] + ($points/2); 
        $team[$teamrow["Away"]] = $team[$teamrow["Away"]] + ($points/2); 
       } 
       if ($teamrow["Result"] == "Away"){ 
        $team[$teamrow["Away"]] = $team[$teamrow["Away"]] + $points; 
       } 
       if ($teamrow["Result"] == "HomeForfeit"){ 
        $team[$teamrow["Home"]] = $team[$teamrow["Home"]] - $points; 
        $team[$teamrow["Away"]] = $team[$teamrow["Away"]] + $points; 
       } 
       if ($teamrow["Result"] == "AwayForfeit"){ 
        $team[$teamrow["Home"]] = $team[$teamrow["Home"]] + $points; 
        $team[$teamrow["Away"]] = $team[$teamrow["Away"]] - ($points/2); 
       } 
       if ($teamrow["Result"] == "DuelForfeit"){ 
        $team[$teamrow["Home"]] = $team[$teamrow["Home"]] - ($points/2); 
        $team[$teamrow["Away"]] = $team[$teamrow["Away"]] - ($points/2); 
       } 
      } 
     } 

Dieser Code funktioniert, und die Aktualisierung erfolgreich in meiner MySQL-Tabelle (dieser Teil des Codes nicht enthalten) jedes Mal, wenn eine dieser Zeilen verwendet wird, bekomme ich einen "PHP-Hinweis: Undefinierter Index:" Fehler.

Ist das eine schlechte Übung oder ist das die falsche Syntax? Ich bin verwirrt, warum es funktioniert, aber sagt mir immer noch undefined Index.

BEARBEITEN: Die Zeilen, die Fehler sind, sind die Zeiten, die ich auf eine Zeile mit einem doppelten Array wie "$ team [$ teamrow [" Home "]]" zugreifen. Jedesmal, wenn auf einen dieser Zugriffe zugegriffen wird, erhalte ich einen Fehler.

EDIT: Ich denke, ich bekomme es .. Ich erstelle einen neuen Schlüssel in einem Array, das nicht bereits existiert?

+0

Welche Zeile ist fehlerhaft? – Machavity

Antwort

0

Antwort: Ich erstellte einen neuen Index in einem assoziativen Array, das noch nicht existierte. fehlerfreier Code hier:

$ team = array(); $ counter = 0;

 $sql = "SELECT Home, Away, Result, Points FROM schedule"; 
     $schedulequery = mysqli_query($conn, $sql); 

     // divy out the points 
     if (mysqli_num_rows($schedulequery) > 0) { 
      while($teamrow = mysqli_fetch_assoc($schedulequery)) { 

       $points = $teamrow["Points"]; 
       if ($teamrow["Result"] == "Home"){ 
        if (!isset($team[$teamrow["Home"]])){ 
         $team[$teamrow["Home"]] = 0; 
        } 

        $team[$teamrow["Home"]] = $team[$teamrow["Home"]] + $points; 
       } 
       if ($teamrow["Result"] == "Tie"){ 
        if (!isset($team[$teamrow["Home"]])){ 
         $team[$teamrow["Home"]] = 0; 
        } 
        if (!isset($team[$teamrow["Away"]])){ 
         $team[$teamrow["Away"]] = 0; 
        } 
        $team[$teamrow["Home"]] = $team[$teamrow["Home"]] + ($points/2); 
        $team[$teamrow["Away"]] = $team[$teamrow["Away"]] + ($points/2); 
       } 
       if ($teamrow["Result"] == "Away"){ 
        if (!isset($team[$teamrow["Away"]])){ 
         $team[$teamrow["Away"]] = 0; 
        } 
        $team[$teamrow["Away"]] = $team[$teamrow["Away"]] + $points; 
       } 
       if ($teamrow["Result"] == "HomeForfeit"){ 
        if (!isset($team[$teamrow["Home"]])){ 
         $team[$teamrow["Home"]] = 0; 
        } 
        if (!isset($team[$teamrow["Away"]])){ 
         $team[$teamrow["Away"]] = 0; 
        } 

        $team[$teamrow["Home"]] = $team[$teamrow["Home"]] - $points; 
        $team[$teamrow["Away"]] = $team[$teamrow["Away"]] + $points; 
       } 
       if ($teamrow["Result"] == "AwayForfeit"){ 
        if (!isset($team[$teamrow["Home"]])){ 
         $team[$teamrow["Home"]] = 0; 
        } 
        if (!isset($team[$teamrow["Away"]])){ 
         $team[$teamrow["Away"]] = 0; 
        } 

        $team[$teamrow["Home"]] = $team[$teamrow["Home"]] + $points; 
        $team[$teamrow["Away"]] = $team[$teamrow["Away"]] - ($points/2); 
       } 
       if ($teamrow["Result"] == "DuelForfeit"){ 
        if (!isset($team[$teamrow["Home"]])){ 
         $team[$teamrow["Home"]] = 0; 
        } 
        if (!isset($team[$teamrow["Away"]])){ 
         $team[$teamrow["Away"]] = 0; 
        } 

        $team[$teamrow["Home"]] = $team[$teamrow["Home"]] - ($points/2); 
        $team[$teamrow["Away"]] = $team[$teamrow["Away"]] - ($points/2); 
       } 
      } 
     } 
+0

Damm, du hast es herausgefunden, gerade als ich den Code eingegeben habe –

0

von dem, was ich das Problem, sagen kann, könnten die Linien wie $team[$teamrow["Home"]] = $team[$teamrow["Home"]] + $points; sein.

Am Anfang Ihres Codes initialisieren Sie $team als ein leeres Array ohne Indizes oder Werte. Dann in Ihrer While-Schleife haben Sie Linien wie $team[$teamrow["Home"]] = $team[$teamrow["Home"]] + $points; und das Problem ist die rechte Seite der =. Was ist der Wert $team[$teamrow["Home"]] wird in der allerersten Iteration zu $points hinzugefügt (wenn $ team ist ein leeres Array sein)?

, da es scheint, dass Sie ganze Zahlen verwenden, zu Beginn Ihrer while-Schleife tun würde ich die folgenden

if(!isset($team[$teamrow["Home"]])) 
{ 
    $team[$teamrow["Home"]] = 0; 
} 

und ebenso würde ich mit $team[$teamrow["Away"]] das gleiche tun. Auf diese Weise, wenn $team[$teamrow["Home"]] nicht definiert ist, wird es einen Wert von 0

geben
+0

Dank Memor-X, ich wusste nicht, dass du das zuerst nicht tun könntest; Ich denke, der Computer kann daraus schließen, was ich meinte, sagt aber immer noch, dass es das nicht mag. Sie können neue Indizes frei deklarieren, wenn Sie numerische Tasten verwenden, richtig? –

+0

@ben, es ist nicht der Computer, der die leere Variable ableitet, sondern PHP (andere Sprachen auf einem Computer werden einen Fehler auslösen und abstürzen, wenn Sie das versuchen) und ja, wie Sie aus [dieser Antwort] sehen können (http: //stackoverflow.com/a/1138382/1028804) wird es auch mit Integer-Schlüsseln funktionieren. wie für warum es immer noch nicht mag es vielleicht auch mit [array_key_exists] (http://php.net/manual/en/function.array-key-exists.php) (dh.?! array_key_exists ([$ teamrow ["Home "], $ team)') obwohl ich gedacht hätte "isset" wäre genug gewesen –

Verwandte Themen