Как мне `json_encode ()` ключи из массива PHP? - PullRequest
13 голосов
/ 30 января 2011

У меня есть массив, который печатает вот так

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);

Ответы [ 4 ]

45 голосов
/ 30 января 2011

Вы можете принудительно заставить 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}

Но вы должны делать это только в том случае, если объект действительно требуется.

6 голосов
/ 30 января 2011

Используйте это вместо:

json_encode((object)$temp)

Это преобразует массив в объект, который при кодировании JSON отображает ключи.

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

0 голосов
/ 30 января 2011

Это определенное поведение.Показанный вами массив является неассоциативным, обычно индексируемым массивом.Его индексы неявно числовые.

Если вы декодируете массив в PHP или JavaScript, вы сможете получить доступ к элементам, используя индекс:

$temp_array = json_decode($temp_json);

echo $temp_array[2]; // 9274078
0 голосов
/ 30 января 2011

Потому что это только индексы массива.Если вы хотите добавить какое-то имя к каждому элементу, вам нужно использовать ассоциативный массив.

Когда вы декодируете этот массив JSON, он вернется к 0, 1, 2, 3 и т. Д.1003 *

...