2011-01-30 14 views
10

Mam tablicę, która drukuje się tenJak mogę uzyskać klucze `json_encode()` z tablicy PHP?

Array ([0] => 1691864 [1] => 7944458 [2] => 9274078 [3] => 1062072 [4] => 8625335 [5] => 8255371 [6] => 5476104 [7] => 6145446 [8] => 7525604 [9] => 5947143) 

Gdybym json_encode($thearray) otrzymuję coś takiego

[1691864,7944458,9274078,1062072,8625335,8255371,5476104,6145446,7525604,5947143] 

Dlaczego nazwa nie jest kodowany (np 0, 1, 2, 3 itd)? i jak mam to zrobić, aby pojawił się w kodzie jsona? pełny kod jest poniżej

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

Odpowiedz

31

Można wymusić że json_encode używa obiektu chociaż jesteś przechodzącą tablicę z klawiszy numerycznych poprzez ustawienie JSON_FORCE_OBJECT opcję:

json_encode($thearray, JSON_FORCE_OBJECT) 

Następnie zwrócona wartość będzie obiekt JSON z klawiszy numerycznych:

{"0":1691864,"1":7944458,"2":9274078,"3":1062072,"4":8625335,"5":8255371,"6":5476104,"7":6145446,"8":7525604,"9":5947143} 

Ale należy to robić tylko wtedy, gdy obiekt jest naprawdę wymagany.

+1

Nie wiesz o "JSON_FORCE_OBJECT", jakimkolwiek upadku, używając tego parametru? Zagłosowano ~ Ty –

0

Ponieważ są to tylko indeksy tablicy. Jeśli chcesz dodać jakąś nazwę do każdego elementu, musisz użyć tablicy asocjacyjnej.

Podczas dekodowania JSON że tablica mimo to przyjdzie z powrotem do 0, 1, 2, 3 itd

0

to jest zdefiniowane zachowanie. Tablica, którą wyświetlasz, jest niezespoloną, zwykle indeksowaną tablicą. Jego indeksy są niejawnie numeryczne.

Jeśli zdekodować tablicę w PHP lub JavaScript, będzie w stanie uzyskać dostęp do elementów za pomocą indeksu:

$temp_array = json_decode($temp_json); 

echo $temp_array[2]; // 9274078 
5

Używaj zamiast tego:

json_encode((object)$temp) 

ten przekształca tablicę do obiektu , który po zakodowaniu JSON wyświetli klawisze.

Jeśli przechowujesz sekwencję danych, a nie odwzorowywanie numeru na inny numer, powinieneś używać tablicy.

Powiązane problemy