2010-02-04 8 views
8

Wynik tego kodu:Dlaczego nie mogę ustawić wartości zero jako pierwszego klucza w tablicy?

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; 

jest:

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

można zauważyć, jak to pomijanie pierwszego numeru, który jest zerowy? Pytanie brzmi: dlaczego?

+0

jakiej wersji PHP używasz? – MANCHUCK

+0

Jestem w stanie powtórzyć to w 5.3.0. Problem leży w json_encode - print_r'ing Tablica $ a pokazuje, że jest poprawnie indeksowana. –

+0

To będzie wersja PHP 5.2.6 –

Odpowiedz

2

chcesz json_encode ($ a, JSON_FORCE_OBJECT). Niestety, została dodana tylko w wersji 5.3.

+1

Ponadto, jest prostszy przypadek testowy: php -r 'var_dump (json_encode (array (array (0 => 0), array (1 => 1)));)); string (13) "[[0], {" 1 ": 1}]" –

+0

Nie mogę nawet przetestować go, odkąd Rackspace Cloud Sites utknął @ 5.2.6. Spróbuję obejść ten problem z json_encode. –

+0

Dobrze, udało mi się poprawnie użyć json_encode z obiektu zamiast z tablicy. Problem polega na tym, że wypuszcza ciągi wszędzie, a nie takie liczby całkowite, jakich potrzebowałbym w niektórych przypadkach, ale zajmie to się później. Dzięki! –

0

nie zrobił indeksowane macierzy

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: ** na moim laptopie, jeśli zrobię print_r ($ a); ja się tej tablicy: który określa zerową

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

Technicznie nie powinno być konieczne. Składnia [] powinna automatycznie zwiększać indeks (zaczynając od 0, oczywiście). Twój nie zadziałałby zgodnie z oczekiwaniami, jeśli $ a ma już elementy, a jego pętla for po prostu dodaje do nich. –

+0

Wciąż przeskakuje "0". –

0

To jest hack, ale możesz przedłużyć fałszywy element.

$a = array('dummy'=>1); 
for($i = 0; $i <= 7; $i++) { 
    ... 
Powiązane problemy