2015-10-28 5 views
1

У меня есть массив с именами, разностями целей и т. Д. Для футбольных команд, которые я хочу поместить в таблицу, но во время foreach последний ключ в массиве каким-то образом изменяется ,Обновление базы данных с помощью foreach меняет массив перед обновлением

Последние два ключа до Еогеасп

[18] => Array 
 
     (
 
      [team_code] => 4 
 
      [team_name] => Newcastle 
 
      [points] => 6 
 
      [goals_for] => 12 
 
      [goals_against] => 22 
 
      [goal_difference] => -10 
 
     ) 
 

 
    [19] => Array 
 
     (
 
      [team_code] => 7 
 
      [team_name] => Aston Villa 
 
      [points] => 4 
 
      [goals_for] => 9 
 
      [goals_against] => 17 
 
      [goal_difference] => -8 
 
     ) 
 

 
)

После Еогеасп

[18] => Array 
 
     (
 
      [team_code] => 4 
 
      [team_name] => Newcastle 
 
      [points] => 6 
 
      [goals_for] => 12 
 
      [goals_against] => 22 
 
      [goal_difference] => -10 
 
     ) 
 

 
    [19] => Array 
 
     (
 
      [team_code] => 4 
 
      [team_name] => Newcastle 
 
      [points] => 6 
 
      [goals_for] => 12 
 
      [goals_against] => 22 
 
      [goal_difference] => -10 
 
     ) 
 

 
)

Мой Еогеасп выглядит следующим

foreach ($teams as $team) { 
 
    $team_code = $team['team_code']; 
 
    $team_name = $team['team_name']; 
 
    $points = $team['points']; 
 
    $goals_for = $team['goals_for']; 
 
    $goals_against = $team['goals_against']; 
 
    $goal_difference = $team['goal_difference']; 
 

 
    if ($update_query = $conn->query("UPDATE teams SET points = $points, goals_for = $goals_for, goals_against = $goals_against, goal_difference = $goal_difference WHERE team_code = $team_code")) { 
 
     echo 'Updated '.$team_name.'<br>'; 
 
    } else { 
 
     $update_query->error; 
 
    } 
 
    }

Почему изменяется последний ключ? Это происходит до выполнения запроса, потому что строка не обновляется. Все остальные обновляют, как должны.

+1

Вы используете [ссылку] (http://php.net/manual/en/language.references.php) где-то рядом с этим фрагментом кода? – VolkerK

+0

Поместите некоторые echo/print_r/var_dump и проверьте свои выходы и инструкции SQL ... –

+0

Спасибо @VolkerK, вот и все. Странное поведение, я думаю. –

ответ

1

Благодаря VolkerK мне удалось это решить.

У меня есть еще один foreach со ссылкой на &$team перед началом foreach, и установка unset($team) между двумя командами решила проблему.

0

Я не думаю, что с вашим php-скриптом что-то не так. Я бы посмотрел, как массив строится до того, как он попадает в цикл foreach. Как форма, для которой вы вводите данные. Если вы вводите сразу несколько команд, как вы дифференцируете элементы