2012-12-19 3 views
1

json_encode에 대한 쿼리 결과 세트를 echo 할 때 각 객체 앞에 결과 행 번호가 표시되는 이유를 모르겠습니다. 방금 반환 된 총 행 수를 계산하고 JSON 문자열의 시작 부분에 한 번만 표시하도록 설정 한 다음 나중에 행을 반환합니다. 나는. 다음 코드를 사용 :불필요한 행 인덱스 번호를 부여하는 JSON - 활성 레코드 - Codeigniter

   //...active record query 
       $result = $this->db->get(); 

       $data = array(); 

       $count = 1; 

       foreach($result->result() as $row) 
       { 
        $data['count'] = $count; 
        $entry = array(); 
        $entry['firstname'] = $row->first_name; 
        $entry['lastname'] = $row->last_name; 
        $entry['jobtitle'] = $row->title; 
        $entry['dept'] = $row->dept_name; 
        $entry['deptid'] = $row->dept_no; 

        if($row->emp_no == null) 
        { 
         $entry['ismanager'] = 0; 
        } 
        else 
        { 
         $entry['ismanager'] = 1; 
        } 
        $data[] = $entry; 
        $count++; 
       } 

       return $data; 

다음 컨트롤러에서 그것을로 json_encode, 내가 얻을 :

{"count":35,"0":{"firstname":"Georgi","lastname":"Facello","jobtitle":"Senior Engineer","dept":"Development","deptid":"d005","ismanager":0},"1":{"firstname":"Kirk","lastname":"Facello","jobtitle":"Senior Engineer","dept":"Development","deptid":"d005","ismanager":0},....rest of the query results 

이 내가 원하지 않는 것은 행 결과 전에 "0""1" 등이다. 이미 반환 된 결과의 총 개수가 있으므로 개별 행 번호가 필요하지 않습니다.

친절하게 도와 주시면 감사하겠습니다. 고마워요.

답변

1

당신이 JSON과 같은 배열을 직렬화하려고하면, 그것은 이런 식으로 뭔가 될 것입니다 :

{"field":value, "0":elem1, "1":elem2, "2":elem3, ...} 
:
[elem1, elem2, elem3, ...] 

그러나 "배열"다음 다른 필드가있는 경우이 객체로 직렬화됩니다

배열 구문을 사용하여 field을 직렬화 할 수있는 방법이 없으므로 json_encode은 단순히 폐기 할 수 없으므로 객체 구문을 사용합니다. the docs에 명시된 바와 같이

참고

키가 0에서 시작하는 연속적인 치열하지 않은 경우, 어레이를 인코딩 할 때, 모든 키 문자열로 인코딩하고, 각 키에 대해 명시 적으로 지정된다

값 쌍.

$data = array(); 
$list = array(); 
$data['list'] = list; 

$count = 1; 
foreach($result->result() as $row) 
{ 
    $data['count'] = $count; 
    $entry = array(); 
    ... 
    $list[] = $entry; 
    $count++; 
} 

같은 것으로 직렬화 것 :

이에 대한 가능한 해결 방법은 요소의 목록에서 수를 분리 할 것입니다 당신이 사용하고있는 것처럼

{"count":35,"list":[{"firstname":"Georgi","lastname":"Facello","jobtitle":"Senior Engineer","dept":"Development","deptid":"d005","ismanager":0},{"firstname":"Kirk","lastname":"Facello","jobtitle":"Senior Engineer","dept":"Development","deptid":"d005","ismanager":0},....rest of the query results]} 
+0

고마워요. 직렬화에 대해 방금 설명한 내용을 어디서 배울 수 있습니까? 감사합니다 – a7omiton

+0

@ AZ1 [docs] (http://php.net/manual/en/function.json-encode.php)의 예제 # 3은 누락 된 요소가있는 배열이 주어질 때'json_encode'가 어떻게 동작하는지 보여줍니다 (또는 비 순차 요소). 내 상식은 배열에 "추가"필드가있는 경우에도 동일한 결과가 발생할 것이라고 말했습니다 (마지막 참고 사항 참조). – mgibsonbr

0

같습니다 에 JSON_FORCE_OBJECT을 입력하면 숫자 색인이 항상 속성으로 표시됩니다. 질문에 json_encode 단계를 표시해야합니다.

옵션을 끄고 기본 인코딩으로 이동하면 숫자로 색인 된 배열을 고유 한 속성에 중첩해야합니다. 그렇지 않으면 숫자 인덱스가 유효한 JSON을 만들기 위해 속성으로 표시됩니다. 객체에 행을 할당 할 때 다음과 같이 수행하십시오.

$data['records'][] = $entry; 
관련 문제