2017-01-11 50 views
0

我有“服务器”那我存储在一个JSON文件的数组。PHP:获取关联数组返回null,尽管现有的var_dump

JSON文件看起来是这样的: {"1":{"available":1,"players":0,"maxplayers":4}}

我检索与此此值:

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

然而,当我尝试用$server = $servers[$id]访问数组,$server为空。我注意到钥匙在引号中,所以我也尝试将$id铸造成一个字符串,并用引号(“)将它包围起来,但它不起作用。

需要注意的是,此代码返回”NULL“ :

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

'$ servers [$ id]'你的json中不存在。 json中的'id'键在哪里? – bos570

+2

而不是类型铸造只是通过真'作为第二个参数'json_decode()' – Rizier123

+0

'$ id'是关键。 @ bos570 – SamJakob

回答

1

谢谢,@ Rizier123(谁解决了这个问题)

显然经过TRUE作为第二个参数来我json_decode功能修复该问题

检查PHP做后。 cumentation为json_decode()PHP: json_decode),似乎通过该参数是指所得到的解码阵列被自动转换成一个关联数组(这是经常性的,这意味着这会自动发生为子阵列)。

编辑:@ Rizier123也说:“你可能需要阅读:stackoverflow.com/a/10333200了解好一点,为什么它是如此‘’和你的方法根本无法正常工作”怪异

0

您的代码是错误的。另外,您不需要在执行json_decode时键入,您可以改为将第二个参数设置为true更多信息here。 你也不必使用array_keys功能在你的foreach循环, 试试这个。

$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

它只是一个偏好问题。差异很小:echo没有返回值,而print的返回值为1,因此可以在表达式中使用。 –

+0

供参考:foreach循环只是为了证明我的观点,并不会用于生产。 – SamJakob