2011-01-30 9 views
10

Ho una matrice che stampa come questoCome faccio a `json_encode()` chiavi dall'array PHP?

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

Se mi json_encode($thearray) ottengo qualcosa di simile

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

Perché il nome non è codificato (per esempio 0, 1, 2, 3, ecc)? e come dovrei farlo per farlo apparire nel codice JSON? il codice completo è sotto

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

risposta

31

È possibile forzare che json_encode utilizza un oggetto, anche se si sta passando un array con i tasti numerici impostando l'opzione diJSON_FORCE_OBJECT:

json_encode($thearray, JSON_FORCE_OBJECT) 

Quindi il valore restituito sarà un oggetto JSON con i tasti numerici:

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

Ma è necessario farlo solo se un oggetto è realmente richiesto.

+1

Non conoscevo 'JSON_FORCE_OBJECT', nessuna caduta utilizzando questo parametro? Votato ~ Ty –

0

Poiché questi sono solo gli indici dell'array. Se si desidera aggiungere un tipo di nome a ciascun elemento, è necessario utilizzare un array associativo.

Quando si decodifica che JSON dell'array se tornerà ad 0, 1, 2, 3 ecc

0

Questo comportamento è definito. L'array che mostri è un array non associativo, normalmente indicizzato. I suoi indici sono implicitamente numerici.

Se decodificare l'array in PHP o JavaScript, si sarà in grado di accedere agli elementi utilizzando l'indice:

$temp_array = json_decode($temp_json); 

echo $temp_array[2]; // 9274078 
5

Utilizzare questo invece:

json_encode((object)$temp) 

Questo trasforma l'array in oggetto , che quando è codificato JSON, mostrerà le chiavi.

Se si sta memorizzando una sequenza di dati, non una mappatura da numero a un altro numero, è necessario utilizzare la matrice.

Problemi correlati