php 배열때문에 궁금해서 질문드립니다..
본문
원래 제가 자주다루었던 배열 형태는 다음과 같습니다..
$data = array(
"a1" => "fdfdf",
'b1' => "fdfdfdf",
"c1" => "fdfd",
"d1" => "fdfdfdfd",
"e1" => array(
"e11" => "fdfd",
"e12" => "fdfd",
"e13" => "fdfdfdf",
"e14" => "fdfdfdf"
)
);
이런 형식을 json_encode 해서 값도 넘기고 그랬는데요..
근데 또 다음과 같은 형식으로 해서 json_encode 해서 넘겨야 할것 같아서요..
$postData = ' [
{
"a1": "dfdfdfdf",
"b1": "fdfdfd",
"c1": "fdfdfdf",
"d1": "dfdfdfdfd",
"e1" : [
{ "e11":"fdfdf",
"e12":"fdfdfdf",
"e13": "fdfdfdf",
"e14": "fdfdfdfdf"
}]
}
]
';
이런 형식으로 배열을 만들려면 어떤 함수를 써야 할지 궁금합니다..
답변주시는분들 미리 감사드려요~~
답변 3
<?php
// for beginners. 먼저 [ ] = Array, { } = Object 입니다.
// 원하는 결과값을 json_decode() 함수를 이용해 살펴봅니다.
$postData = ' [
{
"a1": "dfdfdfdf",
"b1": "fdfdfd",
"c1": "fdfdfdf",
"d1": "dfdfdfdfd",
"e1" : [
{ "e11":"fdfdf",
"e12":"fdfdfdf",
"e13": "fdfdfdf",
"e14": "fdfdfdfdf"
}]
}
]
';
print_r(json_decode($postData)); // json_decode($postData, 1)로 할 경우 모두 배열이 되기 때문에 달라집니다.
/*
Array
(
[0] => stdClass Object
(
[a1] => dfdfdfdf
[b1] => fdfdfd
[c1] => fdfdfdf
[d1] => dfdfdfdfd
[e1] => Array
(
[0] => stdClass Object
(
[e11] => fdfdf
[e12] => fdfdfdf
[e13] => fdfdfdf
[e14] => fdfdfdfdf
)
)
)
)
*/
// 동일한 형태로 값을 직접 할당해봅니다.
$temp = [
(object)[
'a1' => 'dfdfdfdf',
'b1' => 'fdfdfd',
'c1' => 'fdfdfdf',
'd1' => 'dfdfdfdfd',
'e1' => [
(object)[
'e11' => 'fdfdf',
'e12' => 'fdfdfdf',
'e13' => 'fdfdfdf',
'e14' => 'fdfdfdfdf',
],
],
]
];
print_r($temp);
/* 위쪽의 json_decode() 값과 동일하죠?
Array
(
[0] => stdClass Object
(
[a1] => dfdfdfdf
[b1] => fdfdfd
[c1] => fdfdfdf
[d1] => dfdfdfdfd
[e1] => Array
(
[0] => stdClass Object
(
[e11] => fdfdf
[e12] => fdfdfdf
[e13] => fdfdfdf
[e14] => fdfdfdfdf
)
)
)
)
*/
// 그대로 json_encode() 처리하면 역시 동일한 값을 얻을 수 있죠?
echo json_encode($temp, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
/*
[
{
"a1": "dfdfdfdf",
"b1": "fdfdfd",
"c1": "fdfdfdf",
"d1": "dfdfdfdfd",
"e1": [
{
"e11": "fdfdf",
"e12": "fdfdfdf",
"e13": "fdfdfdf",
"e14": "fdfdfdfdf"
}
]
}
]
*/
이제 처음으로 돌아가서, $data 배열값을 위와 동일한 형태로 가공해주면 됩니다.
<?php
$data = array( // 질문의 코드 그대로 복사
"a1" => "fdfdf",
'b1' => "fdfdfdf",
"c1" => "fdfd",
"d1" => "fdfdfdfd",
"e1" => array(
"e11" => "fdfd",
"e12" => "fdfd",
"e13" => "fdfdfdf",
"e14" => "fdfdfdf"
)
);
$temp = []; // 초기화 - PHP v5.4 미만은 [] → array() // $temp = array();
$temp[0] = (object)$data; // 형변환 후 할당
foreach ( $temp[0] as $key=>$value ) { // 키 반복
if ( is_array($value) ) { // 값이 배열일 때 실행
unset($temp[0]->$key); // 해당 키 값을 제거하고,
$temp[0]->$key[0] = (object)$value; // 형변환해 다시 할당
}
}
// 최종 결과물
$postData = json_encode($temp, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
/*
[
{
"a1": "fdfdf",
"b1": "fdfdfdf",
"c1": "fdfd",
"d1": "fdfdfdfd",
"e1": [
{
"e11": "fdfd",
"e12": "fdfd",
"e13": "fdfdfdf",
"e14": "fdfdfdf"
}
]
}
]
*/
$postData 는 이미 json_encode 된 데이터인데요.
#아래와 같은 형식으로 배열의 값에 배열을 넣어 주시면 됩니다.
$aDeep1 = array('a','b','c');
$aArray = array('간','나',$aDeep1);
이렇게 해도 됩니다.
$aArray['가'] = 'a';
$aArray['나'] = 'b';
$aArray['다'] = array('a','b','c');