2012-06-22 5 views
4

나는 이와 같이 보이는 함수를 가지고있다.PHP에서 json return을 만드는 방법은 무엇입니까?

function startChatSession($items) { 


    foreach ($test as $chatbox => $void) { 
      $items .= $this->chatBoxSession($chatbox); 
     } 

    if ($items != '') { 
     $items = substr($items, 0, -1); 
    } 

    header('Content-type: application/json'); 
    ?> 
    { 
     "username": "<?php echo $_SESSION['username'];?>", 
     "items": [ 
      <?php echo $items;?> 
     ] 
    } 

    <?php 
    exit(0); 
} 

이 기능의 두 번째 부분에 관심이 있습니다. 나는 다음과 같은 언어로 번역하고 싶다.

echo json_encode(array(
      'username'=>$_SESSION['username'], 
      'items'=>$items 
     )); 

    exit; 

이런 종류의 작품은 그렇지만 그렇지 않다.

{ 
    "username": "johndoe", 
    "items": "\t\t\t\t\t {\r\n\t\t\t\"s\": \"1\",\r\n\t\t\t\"f\": \"babydoe\",\r\n\t\t\t\"m\": \"test\"\r\n\t },\t\t\t\t\t {\r\n\t\t\t\"s\": \"1\",\r\n\t\t\t\"f\": \"\",\r\n\t\t\t\"m\": \"\"\r\n\t }" 
} 

아이디어 :

내 경우
{ 
    "username": "johndoe", 
    "items": [{ 
     "s": "1", 
     "f": "janedoe", 
     "m": "dqwdqwd" 
    }, { 
     "s": "1", 
     "f": "janedoe", 
     "m": "sdfwsdfgdfwfwe" 
    }, { 
     "s": "1", 
     "f": "janedoe", 
     "m": "werwefgwefwefwefweg" 
    }] 
} 

은 다음과 같습니다처럼

응답이 보일 것입니다?

감사

편집 : 내가 $items 덤프 경우

내가 좋아하는 무언가 :

{ 
    s: 1, 
    f: babydoe, 
    m: test 
}, { 
    s: 1, 
    f: babydoe, 
    m: test 
}, { 
    s:1, 
    f: babydoe, 
    m: test 
}, { 
    s: 1, 
    f: babydoe, 
    m: test 
} 
+2

가 보이는 항목'. 'json_encode'를 호출하기 전에'$ items'를 사용하는 경우 아무 것도 할 수 없습니다 – Alexander

+0

substr을 사용하여 $ items의 1 문자를 삭제하는 이유는 무엇입니까? 우리가 그 부분을 건너 뛰거나 조정할 수 있다면 배열을 반환 할 수 있으며 모든 것이 잘 작동합니다. – edwardmp

답변

1

이 시도가 :

echo json_encode(array(
     'username'=>$_SESSION['username'], 
     'items'=>array($items) 
    )); 

당신은 다중 레벨의 배열이 필요합니다.

예를 들어 codepad을 참조하십시오.

+0

'$ items'가 배열이 아닌 것처럼 보입니다. 내 게시물 편집을 참조하십시오. – Patrioticcow

+0

내 코드가 제대로 작동 할 것입니다. 코드 앞에'$ items = array ($ items);'를 넣으십시오. – edwardmp

+0

예. 그것은 작동하는 것처럼 보이지만 나는 여전히 그 도피를 얻는다. \ t \ t \ t \ t \ t {\ r \ n \ t \ t \ t \ "s \": \ "1 \", \ r \ n \ t \ t \ t \ "f \": ...... ...... 거기에 어떤 아이디어가 있습니까? – Patrioticcow

1

귀하의 $ 항목 배열은 다음과 같아야합니다

<?php 
$items = array(
    0 => array('s'=>1, 'f'=>'janedoe', 'm'=>'dqwdqwd'), 
    1 => array('s'=>1, 'f'=>'janedoe', 'm'=>'sdfwsdfgdfwfwe'), 
    2 => array('s'=>1, 'f'=>'janedoe', 'm'=>'werwefgwefwefwefweg') 
); 

echo json_encode(array(
     'username'=>$_SESSION['username'], 
     'items'=>$items 
    )); 
?> 

http://codepad.org/mZk4hsKq

+0

'$ items'을 덤프하는 부분을 참조하십시오. – Patrioticcow

+0

zend_debug :: dump() – Patrioticcow

+0

좋습니다. 따라서 $ items는 json 문자열입니다.'json_encode'는 배열을 가져 와서 json 문자열을 생성하려고합니다. 먼저'$ items' 문자열을 디코드해야합니다. – swatkins

0

변경

$items = substr($items, 0, -1); 

하려면 :`$를 꽤 - 인쇄처럼

foreach($items as $index => $d){ 
$items[$index] = substr($d, 0, -1); 
} 
관련 문제