배열을 json으로 변환한 후의 결과는 배열입니까 아니면 객체입니까? (여행 기록)

藏色散人
풀어 주다: 2023-04-09 17:46:01
앞으로
3597명이 탐색했습니다.

추천: "PHP Video Tutorial"

최근 직장에서 이런 문제가 자주 발생해서 기록해두겠습니다~

여기서 설명하고 싶은데 json_encode 이후에는 결과가 모두 문자열인데 결과는 제가 여기서 얘기하는 것이 프론트엔드로 변환한 결과입니다. 최근 인터페이스 데이터를 많이 작성하다보니 PHP로만 보면 이런 문제가 자주 발생합니다.

문제: 배열을 json으로 변환합니다. 때로는 객체로, 때로는 배열로 변환합니까?

사례 1:

$arr = [1,2,3];//数组下标从0开始的
echo json_encode($arr);     //[1,2,3] 

$arr = [1=>1,2=>2,3=>3];//数组下标不是从0开始
echo json_encode($arr);//{"1":1,"2":2,"3":3}
로그인 후 복사

이때 배열을 반환해야 한다면 이렇게 처리하면 됩니다.

$arr = [1=>1,2=>2,3=>3];
echo json_encode(array_values($arr));//[1,2,3]
로그인 후 복사

사례 2:

$arr = [];
$arr[0] = 'xxx';
$arr[1] = 'yyy';
echo json_encode($arr);//["xxx","yyy"] 

$arr = [];
$arr[1] = 'yyy';
$arr[0] = 'xxx';
echo json_encode($arr);//{"1":"yyy","0":"xxx"}
로그인 후 복사

과제의 첨자가 다음과 같은 것을 볼 수 있습니다. 똑같고 실행 순서만 바뀌어서 결과가 달라졌네요

다음은 친구가 말한 해결 방법입니다

$arr = [];
$arr[1] = 'yyy';
$arr[0] = 'xxx';
$arr = array_values($arr);
echo json_encode($arr);//["yyy","xxx"]
로그인 후 복사

결과에 문제가 있는 것을 알 수 있습니다. yyy의 원래 인덱스는 1이고, 결과는 0
우리가 원하는 결과 [ "xxx","yyy"]

여기에 해결책이 있습니다

$arr = [];
$arr[1] = 'yyy';
$arr[0] = 'xxx';
ksort($arr);
echo json_encode($arr);//["xxx","yyy"]
로그인 후 복사

사례 3:

$arr = [];
$arr[0] = 'yyy';
$arr[2] = 'xxx';
print_r($arr);
echo json_encode($arr);
/*Array
(
    [0] => yyy
    [2] => xxx
)
{"0":"yyy","2":"xxx"}
*/
로그인 후 복사

사례 4:

$arr = [];
echo json_encode($arr);//[]
로그인 후 복사

요약:

배열을 json으로 변환할 때 인덱스가 0부터 순서대로 0, 1, 2, ...가 아닌 경우 반환되는 json 구조는 객체입니다. 배열을 반환하려면 인덱스를 엄격히 요구해야 합니다. 0부터 순서대로 시작하며 중간에 깨진 숫자가 있으면 안 됩니다.                                     

위 내용은 배열을 json으로 변환한 후의 결과는 배열입니까 아니면 객체입니까? (여행 기록)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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