[php] json_encode 스파 스 PHP 배열을 JSON 객체가 아닌 JSON 배열로 사용

PHP에 다음 배열이 있습니다.

Array
(
    [0] => Array
        (
            [id] => 0
            [name] => name1
            [short_name] => n1
        )

    [2] => Array
        (
            [id] => 2
            [name] => name2
            [short_name] => n2
        )
)

JSON 배열로 JSON 인코딩하여 다음과 같은 문자열을 생성하고 싶습니다.

[  
    {  
        "id":0,
        "name":"name1",
        "short_name":"n1"
    },
    {  
        "id":2,
        "name":"name2",
        "short_name":"n2"
    }
]

그러나이 json_encode배열을 호출 하면 다음을 얻습니다.

{  
    "0":{  
        "id":0,
        "name":"name1",
        "short_name":"n1"
    },
    "2":{  
        "id":2,
        "name":"name2",
        "short_name":"n2"
    }
}

배열이 아닌 객체입니다.

json_encode대신 내 배열을 배열로 인코딩하려면 어떻게 해야합니까?



답변

배열이 순차적이 아니기 때문에이 동작을 관찰하고 있습니다. 배열에는 0및 키가 2있지만 키 는 없습니다 1.

숫자 인덱스만으로는 충분하지 않습니다. json_encodePHP 배열이 순차적 인 경우, 즉 키가 0, 1, 2, 3, … 인 경우에만 PHP 배열을 JSON 배열로 인코딩합니다.

array_values원하는 동작을 얻기 위해 함수를 사용하여 배열을 순차적으로 다시 인덱싱 할 수 있습니다 . 예를 들어 아래 코드는 사용 사례에서 성공적으로 작동합니다.

echo json_encode(array_values($input)).


답변

Arrayin JSON은 인덱스 배열 전용 이므로 얻으려는 구조가 유효한 Json / Javascript가 아닙니다.

PHP Associatives 배열은 JSON의 객체이므로 인덱스가 필요하지 않으면 이러한 변환을 수행 할 수 없습니다.

이러한 구조를 얻으려면 다음을 수행 할 수 있습니다.

$indexedOnly = array();

foreach ($associative as $row) {
    $indexedOnly[] = array_values($row);
}

json_encode($indexedOnly);

다음과 같은 결과를 반환합니다.

[
     [0, "name1", "n1"],
     [1, "name2", "n2"],
]


답변

json_decode ($ jsondata, true);

true 는 모든 속성을 배열로 바꿉니다 (순차적이든 아니든)


답변

이 시도,

<?php
$arr1=array('result1'=>'abcd','result2'=>'efg'); 
$arr2=array('result1'=>'hijk','result2'=>'lmn'); 
$arr3=array($arr1,$arr2); 
print (json_encode($arr3)); 
?>


답변