2010-02-04 22 views
8

Kết quả của mã này:Tại sao tôi không thể đặt 0 là khóa đầu tiên trong mảng?

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; 

là:

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

Bạn có thể nhận thấy như thế nào nó bỏ qua số đầu tiên, đó là zero? Câu hỏi đặt ra là: Tại sao?

+0

bạn đang sử dụng phiên bản PHP nào? – MANCHUCK

+0

Tôi có thể sao chép điều này trên 5.3.0. Vấn đề nằm ở json_encode - print_r'ing mảng $ a cho thấy rằng nó được lập chỉ mục đúng cách. –

+0

Đó sẽ là phiên bản PHP 5.2.6 –

Trả lời

2

Bạn muốn json_encode ($ a, JSON_FORCE_OBJECT). Thật không may, nó chỉ được thêm vào trong 5.3.

+1

Ngoài ra, đây là một trường hợp thử nghiệm đơn giản: php -r 'var_dump (json_encode (mảng (mảng (0 => 0), mảng (1 => 1))));' chuỗi (13) "[[0], {" 1 ": 1}]" –

+0

Tôi thậm chí không thể kiểm tra nó vì Rackspace Cloud Sites bị kẹt @ 5.2.6. Tôi sẽ cố gắng làm việc xung quanh vấn đề json_encode này. –

+0

Tốt, tôi quản lý để sử dụng json_encode đúng từ một đối tượng thay vì một mảng. Vấn đề là nó xuất ra các chuỗi ở khắp mọi nơi và không phải là số nguyên như tôi sẽ cần trong một số trường hợp, nhưng tôi sẽ chăm sóc điều đó sau. Cảm ơn! –

0

Bạn didnt lập chỉ mục mảng của bạn

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: ** Mở máy tính xách tay của tôi nếu tôi làm một print_r ($ a); tôi nhận được mảng này: Bộ nào có số không

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

Về mặt kỹ thuật không cần thiết. Cú pháp [] được cho là sẽ tự động tăng chỉ số (bắt đầu từ 0, rõ ràng). Bạn sẽ không làm việc như mong muốn nếu $ a đã có các mặt hàng và vòng lặp của mình chỉ đơn giản là thêm vào chúng. –

+0

Nó vẫn bị bỏ qua '0'. –

0

Đó là một hack nhưng bạn có thể thêm một phần tử giả.

$a = array('dummy'=>1); 
for($i = 0; $i <= 7; $i++) { 
    ... 
Các vấn đề liên quan