2013-05-28 203 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's Answer的回覆。 – user984976

回答

0

假設您爲每個陣列設置了一定數量的字段,那麼您可以使用PHP的array_chunk()

否則,我認爲你最好的選擇(不幸的是)像你提到的那樣迭代。

0

我同意@thaJeztah:表單應該使用標準HTTP'POST'來發布表單。即使jQuery可以發佈表單內容。將表單數據轉換爲json不是標準的。如果通常讓表單POST,您可以從$ _POST數組中獲取數據。

在任何情況下,你可以使用PHP的網址解析功能:

$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