2010-02-04 4 views
8

Bu kodun sonucu:Dizideki ilk anahtar olarak neden sıfır ayarlayamıyorum?

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; 

geçerli:

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

bunu sıfır ilk sayı, atlama nasıl fark edebilir? Soru şu: Neden?

+0

Hangi PHP sürümünü kullanıyorsunuz? – MANCHUCK

+0

Bunu 5.3.0 üzerinde çoğaltıyorum. Sorun json_encode ile yatıyor - print_r'ing $ a dizisi düzgün dizine eklendiğini gösteriyor. –

+0

Bu PHP Sürüm 5.2.6 –

cevap

2

Sen json_encode istiyorum ($ a, JSON_FORCE_OBJECT) ayarlar: ben bu diziyi olsun. Ne yazık ki, sadece 5.3'te eklendi.

+1

Ayrıca, daha basit bir test durumu: php -r 'var_dump (json_encode (dizi (dizi (0 => 0), dizi (1 => 1))));' string (13) "[[0], {" 1 ": 1}]" –

+0

Rackspace Bulut Siteleri sıkışmış olduğundan bunu test edemiyorum. 5.2.6. Bu json_encode sorununu çözmeye çalışacağım. –

+0

İyi, json_encode öğesini bir dizi yerine bir nesneden düzgün kullanmayı başardım. Sorun şu ki, her yerde dizge çıkarıyor ve bazı durumlarda ihtiyaç duyduğum gibi tamsayı değil, daha sonra bununla ilgileneceğim. Teşekkürler! –

0

Sen dizi endeksli vermedi

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; 

** DÜZENLEME: ** i print_r yaparsanız Benim Laptop ($ a) '; sıfır

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

Teknik olarak gerekli olmamalıdır. [] Sözdiziminin otomatik olarak endeksi artırması beklenir (0'dan başlayarak). Sizin için zaten bir öğe varsa ve onun döngüsü sadece onlara ekliyorsa, istekleriniz işe yaramazdı. –

+0

Hala '0'ı atlıyor. –

0

Bu bir korsanlıktır, ancak kukla bir öğe atayabilirsiniz.

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