【问题标题】:Convert single dimension array into CakePHP multidimensional array将一维数组转换为 CakePHP 多维数组
【发布时间】:2013-05-28 12:51:52
【问题描述】:

我有一个表单,它将 JSON 编码的数据发布到控制器函数,原因是表单是动态的,并且可能包含太多元素,因此受到 Php 配置的限制。

我在控制器中检索 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 已经在内部完成了这项工作,有没有办法简单地访问该核心方法并将数组转换为多维数组?

【问题讨论】:

  • 您如何编码表单中的数据?通过 AJAX 发布数据应该允许您通过常规帖子发布数据,这将为您提供正确格式的数据?
  • 查看我对 Costa 的回答。

标签: cakephp


【解决方案1】:

假设您为每个数组设置了一定数量的字段,您可以使用 PHP 的array_chunk()

否则,我认为您最好的选择(不幸的是)是像您提到的那样进行迭代。

【讨论】:

    【解决方案2】:

    我同意@thaJeztah:表单应该使用标准的 HTTP 'POST' 来发布表单。甚至 jQuery 也可以 POST 表单内容。将表单数据转换为 json 不是标准的。如果让表单正常 POST,则可以从 $_POST 数组中获取数据。

    无论如何,您都可以使用 PHP 的 URL 解析功能:

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

    $result_array 将是一个多维数组。

    【讨论】:

    • 我在转换为序列化/字符串化对象时遇到的问题(我正在使用 JSON.stringify 将整个表单转换为单个字符串),该表单可能包含多达 1000 个元素(页面包含大量的复选框),似乎一旦我检查了一定数量的元素 php / cakephp 会切断表单数据的其余部分?它似乎对元素的数量有限制。您能否建议另一种方式来发布大量元素而不会遇到此限制?
    • 不明白为什么它会切断它。你检查过 PHP 的 POST_MAX_SIZE 设置吗?您当前的方法并没有“错误”,这似乎是一个不必要的额外步骤。 :)
    • @user984976 阵列被切断的原因可能是因为安装了 Suhosin 补丁并配置为限制阵列的大小(请参阅此问题并提出一些建议:$_POST max array size 和此网站:@ 987654323@)。您可以更改这些设置或想知道是否需要始终发送所有输入。由于您已经使用 AJAX,是否可以单独更新字段/值? IE。更改时插入/更新单个地址记录?
    猜你喜欢
    • 2023-03-26
    • 2019-06-29
    • 1970-01-01
    • 2014-11-25
    • 2011-08-24
    • 2019-04-03
    相关资源
    最近更新 更多