2010-02-04 15 views
8

El resultado de este código:¿Por qué no puedo establecer cero como la primera clave en la matriz?

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; 

es:

[ 
    [ 
     [ 
      { 
       "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" 
      } 
     ] 
    } 
] 

¿Se puede notar cómo se salta el primer número, que es cero? La pregunta es: ¿por qué?

+0

¿qué versión de PHP estás utilizando? – MANCHUCK

+0

Puedo replicar esto en 5.3.0. El problema radica en json_encode - print_r'ing the $ a array muestra que está indexado correctamente. –

+0

Eso será PHP Versión 5.2.6 –

Respuesta

2

¿Quieres json_encode ($ a, JSON_FORCE_OBJECT). Lamentablemente, solo se agrega en 5.3.

+1

Además, aquí hay un caso de prueba más simple: php -r 'var_dump (json_encode (array (array (0 => 0), array (1 => 1))));' cadena (13) "[[0], {" 1 ": 1}]" –

+0

Ni siquiera puedo probarlo ya que Rackspace Cloud Sites está trabado @ 5.2.6. Intentaré solucionar este problema json_encode. –

+0

Bueno, logré usar json_encode correctamente de un objeto en lugar de una matriz. El problema es que está produciendo cadenas en todas partes y no números enteros como los que necesitaría en algunos casos, pero me ocuparé de eso más adelante. ¡Gracias! –

0

que aún no ha indexado la matriz

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: ** En mi portátil si hago un print_r ($ a); me sale este arreglo: ¿Qué establece cero

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

Técnicamente no debería ser necesario. La sintaxis [] se supone que incrementa automáticamente el índice (comenzando en 0, obviamente). El suyo no funcionaría como se desea si $ a ya tiene elementos y su bucle for simplemente los está agregando. –

+0

Todavía se está saltando '0'. –

0

Es un truco, pero se puede anteponer un elemento ficticio.

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