json_encode에서 JSON 개체로 인코딩된 희소 배열
배열에 누락된 인덱스가 포함되어 있는 경우 이를 희소 배열이라고 합니다. json_encode는 기본적으로 희소 배열을 배열 대신 JSON 객체로 처리합니다. 이로 인해 다양한 시나리오에서 예상치 못한 동작이 발생할 수 있습니다.
배열-객체 변환 원인
JSON 구문은 인덱스가 누락된 배열을 지원하지 않습니다. json_encode는 희소 배열을 발견하면 이를 객체로 가정하고 그에 따라 변환합니다.
예
다음을 고려하세요. 코드:
$a = array( new stdClass, new stdClass, new stdClass ); $a[0]->abc = '123'; $a[1]->jkl = '234'; $a[2]->nmo = '567'; // First JSON encoding echo json_encode($a) . "\n"; // Unset an element unset($a[1]); // Second JSON encoding echo json_encode($a) . "\n";
출력
[{"abc":"123"},{"jkl":"234"},{"nmo":"567"}] {"0":{"abc":"123"},"2":{"nmo":"567"}}
첫 번째 인코딩에서는 배열이 예상대로 JSON 배열로 변환됩니다. 그러나 인덱스 1을 설정 해제한 후 두 번째 인코딩에서는 희소 배열 문제로 인해 JSON 개체가 생성됩니다.
예방
이러한 동작을 방지하고 일관된 배열 인코딩을 보장하려면 , json_encode에 전달하기 전에 array_values()를 사용하여 배열을 다시 색인화할 수 있습니다. 이렇게 하면 배열의 구멍이 제거되고 json_encode에 의해 배열로 처리됩니다.
수정된 코드
echo json_encode(array_values($a)) . "\n";
이 수정된 코드는 항상 $a를 다음과 같이 인코딩합니다. 누락된 인덱스가 있는지 여부에 관계없이 JSON 배열입니다.
위 내용은 `json_encode`가 희소 PHP 배열을 JSON 개체로 변환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!