2010-02-04 8 views
8

Il risultato di questo codice:Perché non posso impostare zero come prima chiave nell'array?

for($i = 0; $i <= 7; $i++){ 

    $eachone[] = array ('a' => '1', 'b' => '2', 'c' => '3'); 

$a[] = array($i => $eachone); 

unset($eachone); 

} 

$json_string = json_encode($a); 
echo $json_string; 

è:

[ 
    [ 
     [ 
      { 
       "a": "1", 
       "b": "2", 
       "c": "3" 
      } 
     ] 
    ], 
    { 
     "1": [ 
      { 
       "a": "1", 
       "b": "2", 
       "c": "3" 
      } 
     ] 
    }, 
    { 
     "2": [ 
      { 
       "a": "1", 
       "b": "2", 
       "c": "3" 
      } 
     ] 
    }, 
    { 
     "3": [ 
      { 
       "a": "1", 
       "b": "2", 
       "c": "3" 
      } 
     ] 
    }, 
    { 
     "4": [ 
      { 
       "a": "1", 
       "b": "2", 
       "c": "3" 
      } 
     ] 
    }, 
    { 
     "5": [ 
      { 
       "a": "1", 
       "b": "2", 
       "c": "3" 
      } 
     ] 
    }, 
    { 
     "6": [ 
      { 
       "a": "1", 
       "b": "2", 
       "c": "3" 
      } 
     ] 
    }, 
    { 
     "7": [ 
      { 
       "a": "1", 
       "b": "2", 
       "c": "3" 
      } 
     ] 
    } 
] 

Potete notare come è saltare il primo numero, che è pari a zero? La domanda è: perché?

+0

quale versione di PHP stai usando? – MANCHUCK

+0

Sono in grado di replicare questo su 5.3.0. Il problema si trova con json_encode - print_r'ing $ una matrice mostra che è indicizzato correttamente. –

+0

Quello sarà PHP Versione 5.2.6 –

risposta

2

Volete json_encode ($ a, JSON_FORCE_OBJECT). Sfortunatamente, è stato aggiunto solo in 5.3.

+1

Inoltre, ecco un semplice caso di test: php -r 'var_dump (json_encode (array (array (0 => 0), array (1 => 1))));' string (13) "[[0], {" 1 ": 1}]" –

+0

Non riesco nemmeno a verificarlo poiché Rackspace Cloud Sites è bloccato @ 5.2.6. Proverò a risolvere questo problema con json_encode. –

+0

Buono, sono riuscito a usare json_encode correttamente da un oggetto invece che da un array. Il problema è che sta trasmettendo le stringhe ovunque e non interi come avrei bisogno in alcuni casi, ma me ne occuperò in seguito. Grazie! –

0

voi non ha ancora indicizzato la matrice

for($i = 0; $i <= 7; $i++) 
{ 

    $eachone[$i] = array ('a' => '1', 'b' => '2', 'c' => '3'); 

$a[$i] = array($i => $eachone); 

unset($eachone); 

} 

$json_string = json_encode($a); 
echo $json_string; 

** EDIT: ** sul mio portatile se faccio un print_r ($ a); ottengo questa matrice: che imposta pari a zero

Array 
(
    [0] => Array 
     (
      [0] => Array 
       (
        [0] => Array 
         (
          [a] => 1 
          [b] => 2 
          [c] => 3 
         ) 

       ) 

     ) 

    [1] => Array 
     (
      [1] => Array 
       (
        [0] => Array 
         (
          [a] => 1 
          [b] => 2 
          [c] => 3 
         ) 

       ) 

     ) 

    [2] => Array 
     (
      [2] => Array 
       (
        [0] => Array 
         (
          [a] => 1 
          [b] => 2 
          [c] => 3 
         ) 

       ) 

     ) 

    [3] => Array 
     (
      [3] => Array 
       (
        [0] => Array 
         (
          [a] => 1 
          [b] => 2 
          [c] => 3 
         ) 

       ) 

     ) 

    [4] => Array 
     (
      [4] => Array 
       (
        [0] => Array 
         (
          [a] => 1 
          [b] => 2 
          [c] => 3 
         ) 

       ) 

     ) 

    [5] => Array 
     (
      [5] => Array 
       (
        [0] => Array 
         (
          [a] => 1 
          [b] => 2 
          [c] => 3 
         ) 

       ) 

     ) 

    [6] => Array 
     (
      [6] => Array 
       (
        [0] => Array 
         (
          [a] => 1 
          [b] => 2 
          [c] => 3 
         ) 

       ) 

     ) 

    [7] => Array 
     (
      [7] => Array 
       (
        [0] => Array 
         (
          [a] => 1 
          [b] => 2 
          [c] => 3 
         ) 

       ) 

     ) 

) 
+0

Tecnicamente non dovrebbe essere necessario. La sintassi [] dovrebbe aumentare automaticamente l'indice (a partire da 0, ovviamente). Il tuo non funzionerebbe come desiderato se $ a ha già elementi e il suo ciclo for si sta semplicemente aggiungendo a loro. –

+0

Continua a saltare "0". –

0

È un trucco ma è possibile aggiungere un elemento fittizio.

$a = array('dummy'=>1); 
for($i = 0; $i <= 7; $i++) { 
    ... 
Problemi correlati