2016-08-11 1 views
0

J'utilise des tableaux avec les clés comme la clé d'un tableau, dans le code comme ci-dessous,L'utilisation d'un tableau avec une clé comme un tableau clé

 $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); 
       } 
      } 
     } 

Ce code fonctionne et la mise à jour avec succès dans ma table MySql (cette partie du code n'est pas incluse) chaque fois que l'une de ces lignes est utilisée, j'obtiens une erreur "PHP Notice: Undefined index:".

Est-ce une mauvaise pratique ou est-ce la mauvaise syntaxe? Je suis confus pourquoi cela fonctionne mais me dit toujours un index indéfini.

EDIT: Les lignes qui sont défectueuses sont toutes les fois que j'accède à une ligne avec un double tableau comme "$ team [$ teamrow [" Home "]]". Chaque fois que l'on accède à l'un d'entre eux, j'obtiens une erreur.

EDIT: Je pense que je comprends .. Je crée une nouvelle clé dans un tableau qui n'existe pas déjà?

+0

Quelle ligne est défectueuse? – Machavity

Répondre

0

Réponse: Je créais un nouvel index dans un tableau associatif qui n'existait pas encore. code sans erreur ici:

$ team = array(); $ compteur = 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

dam, vous l'avez compris comme je tapais le code –

0

de ce que je peux dire que le problème pourrait être les lignes comme $team[$teamrow["Home"]] = $team[$teamrow["Home"]] + $points;. Au début de votre code, vous initialisez $team en tant que tableau vide sans index ni valeur. puis dans votre boucle while vous avez des lignes comme $team[$teamrow["Home"]] = $team[$teamrow["Home"]] + $points; et le problème est le côté droit de la =. Quelle est la valeur de $team[$teamrow["Home"]] ajoutée à $points dans la toute première itération (quand $ team est utilisé comme un tableau vide)?

car il semble que vous utilisez des entiers, au début de votre boucle alors que je ferais ce qui suit

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

et je aussi faire la même chose avec $team[$teamrow["Away"]]. de cette façon, si $team[$teamrow["Home"]] est indéfini, il recevra une valeur de 0

+0

Merci Memor-X, je ne savais pas que vous ne pouviez pas faire cela au début; Je suppose que l'ordinateur est capable de déduire ce que je voulais dire, mais dit quand même qu'il ne l'aime pas. Vous êtes en mesure de déclarer de nouveaux index librement si vous utilisez des clés numériques, correct? –

+0

@ben sorte de, ce n'est pas l'ordinateur inférer la variable vide, mais PHP (d'autres langues sur un ordinateur va lancer une erreur et se bloquer quand vous essayez de le faire) et oui, comme vous pouvez le voir de [cette réponse] //stackoverflow.com/a/1138382/1028804) ça marchera aussi avec des clefs entières. quant à savoir pourquoi il ne l'aime toujours pas, peut-être aussi en utilisant [array_key_exists] (http://php.net/manual/en/function.array-key-exists.php) (ie. '! array_key_exists ([$ teamrow [" Accueil "], $ team)') bien que j'aurais pensé que 'isset' aurait suffi –