2010-02-04 5 views
8

이 코드의 결과 :배열의 첫 번째 키로 0을 설정할 수없는 이유는 무엇입니까?

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

당신은 제로 첫 번째 번호를 건너 뛰는 어떻게 알 수 있습니까? 질문은 : 왜?

+0

어떤 PHP 버전을 사용하고 있습니까? – MANCHUCK

+0

5.3.0에서이를 복제 할 수 있습니다. 문제는 json_encode와 관련이 있습니다. $ a 배열은 print_r을 사용하여 색인이 제대로 생성되었음을 보여줍니다. –

+0

PHP 버전 5.2.6이됩니다. –

답변

2

당신은로 json_encode를 원하는 ($ A, JSON_FORCE_OBJECT)을 설정 :이 배열을 얻는다. 불행히도 5.3에 추가되었습니다.

+1

또한 간단한 테스트 케이스가 있습니다 : php -r 'var_dump (json_encode (array (0 => 0), array (1 => 1))));); 문자열 (13) "[[0], {"1 ": 1}" –

+0

Rackspace 클라우드 사이트가 @ 5.2.6을 초과하여 테스트 할 수 없습니다. 이 json_encode 문제를 해결하기 위해 노력할 것입니다. –

+0

좋은 점은 배열 대신 객체에서 json_encode를 올바르게 사용할 수있었습니다. 문제는 그것이 어디에서나 문자열을 출력하고 어떤 경우에는 필요로하는 정수가 아니라는 것입니다. 나중에 처리 할 것입니다. 감사! –

0

당신은 당신의 배열 인덱스 didnt한다

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; 

** 편집 : ** 나는 인 print_r 할 경우 내 노트북에 ($를 A); 제로

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

기술적으로는 필요하지 않습니다. [] 구문은 인덱스를 자동으로 증가 시키도록되어 있습니다 (분명히 0에서 시작). $ a에 이미 항목이 있고 for 루프가 단순히 항목을 추가하는 경우에는 사용자가 원하는대로 작동하지 않습니다. –

+0

아직 '0'을 건너 뛰고 있습니다. –

0

해킹이지만 더미 요소를 앞에 추가 할 수 있습니다.

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