2013-05-28 5 views
0

JSON 인코딩 데이터를 Controller 함수에 게시하는 양식이 있습니다. 그 이유는 양식이 동적이며 PHP 구성에 의해 제한되는 요소가 너무 많을 수 있기 때문입니다.단일 차원 배열을 CakePHP 다차원 배열로 변환

나는 내 컨트롤러에서 JSON 데이터를 검색 아무 문제가 없다, 나는 사용하여 배열로 디코딩 할 수 있습니다

$result = json_decode($this->request->data['Address']['result'], true); 

내 문제, 그러나, 결과 데이터는 다음과 같은 형식으로되어 있다는 것입니다 :

array(
    'data[Address][id][0][2087]' => '2087', 
    'data[Address][id][0][2680]' => '2680', 
    'data[Address][id][1][3168]' => '3168', 
    'data[Address][id][1][3911]' => '3911', 
    'data[Address][id][2][1818]' => '1818', 
); 

그러나, 나는 즉, CakePHP의 배열 스타일로 변환하고 싶습니다 :

array(
     'data' => array(
        'Address' => array(
           'id' => array(
               0 => array(
                 2087 => '2087', 
                 2680 => '2680 
                 ), 
               1 => array(
                 3168 => '3168', 
                 3911 => '3911' 
                 ) 
               ) 
            ) 
         ) 
      ) 

배열을 통한 반복을 통해이 작업을 수행 할 수 있다는 것을 알았지 만 CakePHP가 이미 내부적으로이 작업을 수행했기 때문에 핵심 메서드에 액세스하여 배열을 다차원 배열로 변환 할 수있는 방법이 있습니까?

+0

양식의 데이터를 어떻게 인코딩합니까? AJAX를 통해 데이터를 게시하면 올바른 형식으로 데이터를 가져올 일반 게시물을 통해 데이터를 게시 할 수 있어야합니다. – thaJeztah

+0

Costa의 답변에 대한 회신을 참조하십시오. – user984976

답변

0

각 배열에 대해 설정된 수의 필드가 있다고 가정하면 PHP의 array_chunk()을 사용할 수 있습니다.

그렇지 않으면 가장 좋은 방법은 (불행히도) 언급 한대로 반복하는 것입니다.

0

@thaJeztah에 동의합니다. 양식은 양식을 게시 할 때 표준 HTTP 'POST'를 사용해야합니다. jQuery조차도 양식 내용을 POST 할 수 있습니다. 양식 데이터를 json으로 변환하는 것은 표준이 아닙니다. 양식 POST를 정상적으로 사용하면 $ _POST 배열에서 데이터를 가져올 수 있습니다.

은 어떤 경우에, 당신은 PHP의 URL 파싱 기능을 사용할 수 있습니다 :

$urlstring = http_build_query($result); 
parse_str($urlstring , $result_array); 

$의 result_array은 다차원 배열이됩니다.

+0

JSON.stringify를 사용하여 전체 양식을 단일 문자열로 변환하는 직렬화/문자열화 된 개체로 변환 할 때 발생하는 문제는 양식에 최대 1000 개의 요소 (페이지에 많은 수의 확인란 포함)가 포함될 수 있다는 것입니다. 일단 특정 숫자의 요소를 살펴보면 php/cakephp는 양식 데이터의 나머지 부분을 잘라 버리는 것 같습니다. 단순히 요소 수에 제한이있는 것 같습니다. 이 제한 사항을 적용하지 않고 많은 수의 요소를 게시하는 다른 방법을 제안 할 수 있습니까? – user984976

+0

왜 잘려나 가는지 모르겠다. PHP의 [POST_MAX_SIZE] (http://php.net/ini.core.php#ini.post-max-size) 설정을 확인 했습니까? 현재의 방법은 "잘못된"것이 아니라 불필요한 추가 단계처럼 보입니다. :) – Costa

+0

@ user984976 Suhosin 패치가 설치되어 배열의 크기를 제한하도록 구성 되었기 때문에 배열이 잘린 이유는 (몇 가지 제안 사항이있는이 질문을 참조하십시오. [$ _POST max array size] (http : // stackoverflow .com/questions/9807100/post-max-array-size) 및이 웹 사이트 : [Suhosin] (http://www.hardened-php.net/suhosin/)). 이러한 설정을 변경하거나 모든 입력을 항상 보내야하는지 궁금 할 수 있습니다. 이미 AJAX를 사용하고 있으므로 필드/값을 개별적으로 업데이트 할 수 있습니까? 나는. 변경시 개별 주소록을 삽입/업데이트 하시겠습니까? – thaJeztah

관련 문제