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

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

藏色散人
藏色散人앞으로
2021-01-19 15:57:353581검색

추천: "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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제