> 백엔드 개발 > PHP 튜토리얼 > PHP의 `json_encode`가 희소 배열을 JSON 개체로 변환하는 이유는 무엇입니까?

PHP의 `json_encode`가 희소 배열을 JSON 개체로 변환하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-27 08:50:10
원래의
489명이 탐색했습니다.

Why Does PHP's `json_encode` Convert Sparse Arrays to JSON Objects?

json_encode는 희소 배열을 JSON 객체로 인코딩

JSON으로 인코딩된 희소 배열(예: 누락된 인덱스가 있는 배열)의 경우 PHP의 json_encode 함수는 다음을 나타냅니다. 예기치 않은 동작으로 인해 배열이 배열 대신 JSON 개체로 변환됩니다. 이 동작을 이해하기 위해 예를 살펴보겠습니다.

$a = array(
    new stdClass,
    new stdClass,
    new stdClass
);
$a[0]->abc = '123';
$a[1]->jkl = '234';
$a[2]->nmo = '567';

printf("%s\n", json_encode($a));
unset($a[1]);
printf("%s\n", json_encode($a));
로그인 후 복사

출력:

[{
    "abc": "123"
},{
    "jkl": "234"
},{
    "nmo": "567"
}]
{
    "0": {
        "abc": "123"
    },
    "2": {
        "nmo": "567"
    }
}
로그인 후 복사

초기 인코딩에서 json_encode는 희소 배열이 객체로 유효하므로 객체 배열을 생성합니다. . 그러나 설정되지 않은 인덱스(1)를 제거한 후에는 결과 배열에 구멍이 있기 때문에 배열로 인코딩할 수 없습니다.

이 문제를 해결하고 배열이 배열로 인코딩된 상태를 유지하도록 하려면 array_values를 사용하세요. ($a) 인코딩 전:

printf("%s\n", json_encode(array_values($a)));
로그인 후 복사
[{
    "abc": "123"
},{
    "nmo": "567"
}]
로그인 후 복사

array_values로 배열을 다시 인덱싱하면 공백이 제거되어 json_encode가 유효한 JSON 배열을 성공적으로 생성했습니다.

위 내용은 PHP의 `json_encode`가 희소 배열을 JSON 개체로 변환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿