2017-01-11 2 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. Где ключ «id» в json? – bos570

+2

Вместо типа casting просто передайте TRUE как второй параметр в 'json_decode()' – Rizier123

+0

'$ id' является ключом. @ bos570 – SamJakob

ответ

1

Спасибо, @ Rizier123 (кто решается вопрос)

Видимо прохождения TRUE в качестве второго параметра для моей json_decode функции устраняет проблему

После проверки РНР сделать.. cumentation для json_decode() (PHP: json_decode), кажется, что передача этого параметра означает, что полученный декодированный массив автоматически преобразуется в ассоциативный массив (и это повторяется, что означает, что это происходит автоматически для субмассивов).

Edit: @ 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 не имеет возвращаемого значения, а печать имеет возвращаемое значение 1, поэтому его можно использовать в выражениях. –

+0

FYI: Цикл foreach был просто для того, чтобы продемонстрировать мою точку зрения и не будет использоваться в производстве. – SamJakob