테스트 사이트 - 개발 중인 베타 버전입니다

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

젖은낙엽 3년 전 조회 3,461

원래 제가 자주다루었던 배열 형태는 다음과 같습니다..

 

    $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개

채택된 답변
+20 포인트
B
3년 전

</p>

<p><?php</p>

<p>// 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

                        )</p>

<p>                )</p>

<p>        )</p>

<p>)

*/

// 동일한 형태로 값을 직접 할당해봅니다.

$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

                        )</p>

<p>                )</p>

<p>        )</p>

<p>)

*/</p>

<p>// 그대로 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"

            }

        ]

    }

]

*/</p>

<p>

 

이제 처음으로 돌아가서, $data 배열값을 위와 동일한 형태로 가공해주면 됩니다.

</p>

<p><?php</p>

<p>    $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; // 형변환 후 할당</p>

<p>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);</p>

<p>/*</p>

<p>[

    {

        "a1": "fdfdf",

        "b1": "fdfdfdf",

        "c1": "fdfd",

        "d1": "fdfdfdfd",

        "e1": [

            {

                "e11": "fdfd",

                "e12": "fdfd",

                "e13": "fdfdfdf",

                "e14": "fdfdfdf"

            }

        ]

    }

]</p>

<p>*/</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

젖은낙엽
3년 전
비혼님 정말 감사합니다..덕분에 지식이 풍부해졌습니다... ^^

댓글을 작성하려면 로그인이 필요합니다.

파뿌리
3년 전

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

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

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

 

이렇게 해도 됩니다.

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

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

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

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

$postData 는 이미 json_encode 된 데이터인데요.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인