Проблема с json_encode (), он удаляет ключ "0" из JSON строкового номера в PHP - PullRequest
1 голос
/ 01 мая 2020

Мне нужно вызвать это значение, зарегистрированное в столбце MySQL:

{"0":[{"Type":3,"Seconds":-185}],"1":[{"Type":4,"Seconds":-144}]}

С помощью этой формы я получаю JSON из базы данных MySQL:

$boosterResultant = $mysqli->query('SELECT boosters FROM player_equipment WHERE userId = '.$player['userId'].'')->fetch_assoc()['boosters']; //response: "{\"0\":[{\"Type\":3,\"Seconds\":-185}],\"1\":[{\"Type\":4,\"Seconds\":-144}]}"

Я хочу получить доступ к тому, что в 'Секундах', чтобы изменить его значение, поэтому я использую эту форму для его изменения:

$boosterFinal = json_decode($boosterResultant,true);
$boosterFinal[0][0]['Seconds'] += 36000; //the value is changed successfully
echo "Output:", json_encode($boosterFinal); //out: [[{"Type":3,"Seconds":35815}],[{"Type":4,"Seconds":-144}]]

Поскольку я запускаю $boosterFinal = json_decode($boosterResultant,true);, я получаю это: [[{"Type":3,"Seconds":-185}],[{"Type":4,"Seconds":-144}]], но мне нужно чтобы оставаться таким для обновления позже в БД:

{"0":[{"Type":3,"Seconds":35815}],"1":[{"Type":4,"Seconds":-144}]} //good
//bad: [[{"Type":3,"Seconds":35815}],[{"Type":4,"Seconds":-144}]]

Редактировать: Спасибо @A. Cedano (ссылка ответа на испанском sh форуме: здесь ), я нашел ответ:

//This is the data that comes from the sample DB
$str='{"0":[{"Type":3,"Seconds":-185}],"1":[{"Type":4,"Seconds":-144}]}';
//Don't pass TRUE to json_decode to work as JSON as is
$mJson=json_decode($str);
$mJson->{0}[0]->Seconds+=36000;
//Object Test
echo $mJson; //Output: {"0":[{"Type":3,"Seconds":35815}],"1":[{"Type":4,"Seconds":-144}]}

1 Ответ

2 голосов
/ 01 мая 2020

Если PHP видит, что ваши ключи массива являются восходящими целыми числами, он автоматически преобразует их в массив (php .net / manual / en / function. json -encode. php)

Вы можете отключить это, передав флаг JSON_FORCE_OBJECT в качестве второго параметра в json_encode: json_encode($boosterFinal, JSON_FORCE_OBJECT)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...