Как я могу использовать `json_encode()` ключи из массива PHP?
У меня есть массив, который печатает как это
Array ( [0] => 1691864 [1] => 7944458 [2] => 9274078 [3] => 1062072 [4] => 8625335 [5] => 8255371 [6] => 5476104 [7] => 6145446 [8] => 7525604 [9] => 5947143 )
Если я json_encode($thearray)
, я получаю что-то вроде этого
[1691864,7944458,9274078,1062072,8625335,8255371,5476104,6145446,7525604,5947143]
Почему имя не закодировано (например, 0, 1, 2, 3 и т.д.)? и как мне сделать, чтобы он появился в json-коде?
полный код ниже
$ie = 0;
while($ie 10)
{
$genid = rand(1000000,9999999);
$temp[$ie] = $genid ;
$ie++;
}
print_r($temp);
$temp_json = json_encode($temp);
print_r($temp_json);
Ответы
Ответ 1
Вы можете заставить этот json_encode
использовать объект, хотя вы передаете массив с числовыми клавишами, установив параметр JSON_FORCE_OBJECT:
json_encode($thearray, JSON_FORCE_OBJECT)
Тогда возвращаемое значение будет объектом JSON с цифровыми клавишами:
{"0":1691864,"1":7944458,"2":9274078,"3":1062072,"4":8625335,"5":8255371,"6":5476104,"7":6145446,"8":7525604,"9":5947143}
Но вы должны сделать это только в том случае, если объект действительно необходим.
Ответ 2
Используйте это вместо:
json_encode((object)$temp)
Это преобразует массив в объект, который при кодировании JSON отобразит ключи.
Если вы сохраняете последовательность данных, а не сопоставление числа с другим числом, вы действительно должны использовать массив.
Ответ 3
Потому что это просто индексы массива. Если вы хотите добавить какое-то имя для каждого элемента, вам нужно использовать ассоциативный массив.
Когда вы декодируете этот массив JSON, хотя он вернется к 0, 1, 2, 3 и т.д.
Ответ 4
Это определено поведение. Массив, который вы показываете, является неассоциативным, обычно индексированным массивом. Его индексы неявно являются числовыми.
Если вы декодируете массив в PHP или JavaScript, вы сможете получить доступ к элементам с помощью индекса:
$temp_array = json_decode($temp_json);
echo $temp_array[2]; // 9274078