php 배열때문에 궁금해서 질문드립니다..

php 배열때문에 궁금해서 질문드립니다..

QA

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"
            }
        ]
    }
]
*/

#아래와 같은 형식으로 배열의 값에 배열을 넣어 주시면 됩니다.

$aDeep1 = array('a','b','c');

$aArray = array('간','나',$aDeep1);

 

이렇게 해도 됩니다.

$aArray['가'] = 'a';

$aArray['나'] = 'b';

$aArray['다'] = array('a','b','c');

 

답변을 작성하시기 전에 로그인 해주세요.
전체 250
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT