2017-01-11 2 views
0

私はJSONファイルに格納する 'サーバー'の配列を持っています。PHP:結合配列を取得すると、var_dumpに存在するにもかかわらずnullが返されます

JSONファイルは次のようになります。 {"1":{"available":1,"players":0,"maxplayers":4}}

私はこれで、この値を取得:

$servers = (array) json_decode(file_get_contents("activeservers.json")); 

私は$server = $servers[$id]でアレイにアクセスしようとすると、しかし、$serverはnullです。私はキーが引用符で囲まれていることに気づいたので、文字列に$idをキャストして、引用符( ")で囲んでみました。 :(質問を解決)Rizier123 @

foreach(array_keys($servers) as $key){ 
    var_dump($servers[$key]); 
} 
+0

'$ servers [$ id]'はあなたのjsonに存在しません。 jsonの 'id'キーはどこにありますか? – bos570

+2

型変換の代わりに、 'json_decode()'の第2パラメータとしてTRUEを渡します。 – Rizier123

+0

'$ id'がキーです。 @ bos570 – SamJakob

答えて

1

おかげで、私のjson_decode関数の2番目のパラメータが問題を修正して

はどうやらTRUEを渡す

PHP DOをチェックした後。 json_decode()PHP: json_decode)については、このパラメータを渡すと、結果のデコードされた配列が自動的に連想配列に変換されるように見えます(これは繰り返しです。つまり、これはサブ配列に対して自動的に起こります)。

編集:Rizier123も「あなたが読みたいと思うかもしれません:それはそうである理由stackoverflow.com/a/10333200を少しよりよく理解するために 『と言う@』。そして、あなたの方法が正しく動作しませんでした」奇妙

0

コードが間違っています。 json_decodeを実行するときにキャストを入力する必要もなく、代わりに2番目のパラメータをtrue more info hereに設定することもできます。 また、foreachループでarray_keys関数を使用する必要はありません。 これを試してください。

$json = '{"1":{"available":1,"players":0,"maxplayers":4}}'; 
$servers = json_decode($json, true); 

foreach($servers as $key => $value) { 
    print $value["available"]; 
} 

print_r($value)を使用するために利用可能なすべての配列のキーを取得するために行います。また、$key変数を利用して、親配列の配列キーを出力することもできます。

+0

なぜエコーオーバープリント? – SamJakob

+0

それは好みの問題です。違いは小さいです:printは戻り値が1であるので、echoは戻り値を持たないので、式で使うことができます。 –

+0

FYI:foreachループはちょうど私のポイントを示すものであり、本番環境では使用されませんでした。 – SamJakob

関連する問題