2016-12-04 30 views
0

私は非公式のOverwatch APIに接続し、そのプレーヤーの情報を取得してデータベースに保存するアプリケーションを用意しています。私はどのように情報を得て、それが別の場所でも問題ではないことを確認しています。PHP - パラメータ配列内の未定義インデックス

私はそうのようなアレイ内部ヒーローの各々を有する開始:

$heroArray = array(
    "zenyatta" => "0", 
    "mei" => "0", 
    "tracer" => "0", 
    "soldier76" => "0", 
    "anaamari" => "0", 
    "roadhog" => "0", 
    "reinhardt" => "0", 
    "torbjorn" => "0", 
    "mccree" => "0", 
    "junkrat" => "0", 
    "dva" => "0", 
    "winston" => "0", 
    "hanzo" => "0", 
    "widowmaker" => "0", 
    "reaper" => "0",  //this hero is causing problems later 
    "pharah" => "0",  //this hero is causing problems later 
    "symmetra" => "0", //this hero is causing problems later 
    "genji" => "0", 
    "lucio" => "0", 
    "bastion" => "0", 
    "mercy" => "0", 
    "zarya" => "0", 
    "sombra" => "0" 
); 

充填される値は、プレイヤーがこの主人公で果たしてきた時間の量になるように値がゼロに設定されています。その後、ヒーローがループして、APIが返すJSONファイルからの情報を取得します。

foreach($heroArray as $key => $value){ 
    $value = floatval($json[$region]['heroes']['stats']['quickplay'][$key]['general_stats']['time_played']); 
} 

次に、配列とその他の値がalterPlayer関数に渡されます。次のようにSQLコードは次のとおりです。

$sqlQuery= "UPDATE player SET timeplayed = :timeplayed, prestige = :prestige , level = :level, avatar = :avatar, wins = :wins, Zenyatta = :zenyatta, Mei = :mei, Tracer = :tracer, Soldier76 = :soldier76, Anaamari = :anaamari, Roadhog = :roadhog, Reinhardt = :reinhardt, Torbjorn = :torbjorn, Mccree = :mccree, Junkrat = :junkrat, Dva = :dva, Winston = :winston, Hanzo = :hanzo, Widowmaker = :widowmaker, Reaper = :reaper, Pharah = :pharah, Symmetra = :symmetra, Genji = :genji, Lucio = :lucio, Bastion = :bastion, Mercy = :mercy, Zarya = :zarya, Sombra = :sombra, TopHero :heroTopName, SecondHero = :heroSecondName, ThirdHero = :heroThirdName, TopHeroElim = :heroTopElim, TopHeroDeath = :heroTopDeath, SecondHeroElim = :heroSecondElim, SecondHeroDeath = :heroSecondDeath, ThirdHeroElim = :heroThirdElim, ThirdHeroDeath = :heroThirdDeath WHERE Battletag = :battletag"; 

そして値はparams配列(私はここに部屋を保存するために一部の値を削除した)に割り当てられています。私はこの中を実行すると

$params = array(

     "junkrat" => $heroArray['junkrat'], 
     "dva" => $heroArray['dva'], 
     "winston" => $heroArray['winston'], 
     "hanzo" => $heroArray['hanzo'], 
     "widowmaker" => $heroArray['widowmaker'], 
     "reaper" => $heroArray['reaper'],   //problem 
     "pharah" => $heroArray['pharah'],   //problem 
     "symmetra" => $heroArray['symmetra'],  //problem 
     "genji" => $heroArray['genji'], 
     "lucio" => $heroArray['lucio'], 
     "bastion" => $heroArray['bastion'], 
     "mercy" => $heroArray['mercy'] 

    ); 

コマンドライン私は次のエラーが表示されます:

C:\Windows\system32>C:/xampp\php\php.exe C:\xampp\htdocs\overwatch\alterPlayer.php 
NULL 

Notice: Undefined index: reaper in C:\xampp\htdocs\overwatch\PlayerTableGateway.php on line 123 

Notice: Undefined index: pharah in C:\xampp\htdocs\overwatch\PlayerTableGateway.php on line 124 

Notice: Undefined index: symmetra in C:\xampp\htdocs\overwatch\PlayerTableGateway.php on line 125 
Could not update player 

したがって、問題を引き起こしているヒーローは、刈り取る人、pharahと対称です。もし誰かがエラーを見つけられたら、それは非常に感謝されるでしょう!あなたのforeachで

+0

データベースが乱雑です。新しいヒーローをゲームに加えるとどうなるでしょうか?追加の列を作成する必要があります。何かをしなさい。 – Phiter

+0

これは学問的なプロジェクトです。超過ウォッチがこれ以上ヒーローを追加しない場合、私は自分のアプリケーションに追加しません。 – Marzipan

+1

私は参照してください。しかし、マイナーなプロジェクトでさえ、最良のアプローチを使用することは良いことです。 – Phiter

答えて

1

、あなたはおそらくこれをしたい:

foreach($heroArray as $key => $value){ 
    $heroArray[$key] = floatval($json[$region]['heroes']['stats']['quickplay'][$key]['general_stats']['time_played']); 
} 

これは正しく配列を変更します。

+0

あなたの助けをありがとう!私はまだ3人のヒーローのための未確認のインデックスエラーを取得しています。 – Marzipan

+1

問題は '$ json'変数から来ています。あなたがあなたのforeachを実行し、チャンピオンが** quickplay **配列内に存在するかどうかチェックする前に、それをダンプしてください。 – Phiter

+0

foreachループを変更する必要があるという点が残っています。ループは値を '$ value'だけ読み込みます。このように上書きすることはできません。 – user2693053

関連する問題