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"
} ]
그러나 이 어레이를 호출하면 다음과 같은 메시지가 나타납니다.
{
"0":{
"id":0,
"name":"name1",
"short_name":"n1"
},
"2":{
"id":2,
"name":"name2",
"short_name":"n2"
} }
배열이 아닌 객체입니다.
어떻게 하면 얻을 수 있나요?json_encode
내 어레이를 어레이로 인코딩하는 대신?
질문에 대한 답변
RFC 8259 JavaScript Object Notation(JSON; JavaScript 객체 표기법) 데이터 교환 포맷의 어레이를 참조해 주세요.
배열 구조는 0 이상의 값(또는 요소)을 둘러싼 대괄호로 표시됩니다.요소는 쉼표로 구분됩니다.
array = begin-array [value *(value-array value)]end-array
어레이가 순차적이지 않기 때문에 이 동작이 관찰되고 있습니다.0
그리고.2
, 단,1
열쇠로서
숫자 색인만으로는 충분하지 않습니다. json_encode
PHP 어레이가 시퀀셜일 경우에만 PHP 어레이를 JSON 어레이로 인코딩합니다.즉, 키가 0, 1, 2, 3, …인 경우입니다.
함수를 사용하여 어레이를 순차적으로 다시 인덱싱하여 원하는 동작을 가져올 수 있습니다.예를 들어, 아래 코드는 사용 사례에서 정상적으로 작동합니다.
echo json_encode(array_values($input)).
Array
에서JSON
인덱스 배열만 있으므로 가져오려는 구조는 유효한 Json/Javascript가 아닙니다.
PHP Associates 배열은 JSON의 개체이므로 인덱스가 필요하지 않은 한 이러한 변환을 수행할 수 없습니다.
이러한 구조를 가져오려면 다음을 수행할 수 있습니다.
$indexedOnly = array();
foreach ($associative as $row) {
$indexedOnly[] = array_values($row); }
json_encode($indexedOnly);
Will은 다음과 같은 것을 반환합니다.
[
[0, "name1", "n1"],
[1, "name2", "n2"], ]
json_twhonondata, true);
true를 지정하면 모든 속성이 배열로 바뀝니다(시퀀셜 여부).
이거 드셔보세요.
<?php $arr1=array('result1'=>'abcd','result2'=>'efg');
$arr2=array('result1'=>'hijk','result2'=>'lmn');
$arr3=array($arr1,$arr2);
print (json_encode($arr3));
?>