2016-08-11 2 views
0

Я использую массивы с ключами в качестве ключа для массива, в коде, как показано ниже,Использование массива с ключом, как массив ключевых

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

Этот код работает и успешно обновляя в моей MySql таблицы (эта часть кода не включена) каждый раз, когда используется одна из этих строк, я получаю сообщение об ошибке «Уведомление PHP: Неопределенный индекс:».

Является ли эта плохая практика или это неправильный синтаксис? Я смущен, почему он работает, но все же говорит мне неопределенный индекс.

EDIT: Линии, которые являются ошибками, все время я получаю доступ к строке с двойным массивом типа «$ team [$ teamrow [" Home "]]". Каждый раз, когда к одному из них обращаются, я получаю сообщение об ошибке.

EDIT: Кажется, я понял. Я создаю новый ключ в массиве, который еще не существует?

+0

Какая строка является ошибкой? – Machavity

ответ

0

Ответ: Я создавал новый индекс в ассоциативном массиве, который еще не существовал. код ошибки бесплатный здесь:

$ 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

плотина, вы поняли это так же, как я набирал код –

0

от того, что я могу сказать, что проблема может быть линии, как $team[$teamrow["Home"]] = $team[$teamrow["Home"]] + $points;.

В начале вашего кода вы инициализируете $team как пустой массив без индексов или значений. то в вашем цикле while у вас есть строки, такие как $team[$teamrow["Home"]] = $team[$teamrow["Home"]] + $points;, и проблема в правильной стороне =. какое значение $team[$teamrow["Home"]] добавляется к $points в самой первой итерации (когда команда $ uspposed является пустым массивом)?

, поскольку в этом случае вы используете целые числа, в начале вашего цикла в то время как я хотел бы сделать следующее

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

и также я бы сделал то же самое с $team[$teamrow["Away"]]. таким образом, если $team[$teamrow["Home"]] не определено, ему будет присвоено значение 0

+0

Спасибо Memor-X, я не понимал, что вы не могли этого сделать поначалу; Я предполагаю, что компьютер способен сделать вывод о том, что я имел в виду, но все же говорит, что ему это не нравится. Вы можете свободно объявлять новые индексы, если используете числовые ключи, правда, правильно? –

+0

@ben, это не компьютер, выводящий пустую переменную, но PHP (другие языки на компьютере будут вызывать ошибку и сбой при попытке сделать это), и да, как вы можете видеть из [этого ответа] (http: //stackoverflow.com/a/1138382/1028804), он также будет работать с целыми ключами. как почему он по-прежнему не нравится, возможно, также используя [array_key_exists] (http://php.net/manual/en/function.array-key-exists.php) (то есть '! array_key_exists ([$ teamrow [" Главная страница "], $ team)'), хотя я бы подумал, что 'isset' было бы достаточно –

Смежные вопросы