CakePHP使用哈希来准备模型数组以进行保存

CakePHP使用哈希来准备模型数组以进行保存,php,arrays,cakephp,Php,Arrays,Cakephp,我想知道一个人怎样才能实现以下目标: 这是之前的阵列(插件存储在会话中): 这是后面的数组。我正在将其重新格式化为调用Certificate->save()。我删除了顶层并合并了证书模型 $Data = array( 'Certificate' => array( 'name' => '', 'entity_id' => '1', 'state_id' => '18', 'domicile' => '', 'formation

我想知道一个人怎样才能实现以下目标: 这是之前的阵列(插件存储在会话中):

这是后面的数组。我正在将其重新格式化为调用Certificate->save()。我删除了顶层并合并了证书模型

$Data = array(
'Certificate' => array(
    'name' => '',
    'entity_id' => '1',
    'state_id' => '18',
    'domicile' => '',
    'formation_date' => array(
        'month' => '',
        'day' => '',
        'year' => ''
    ),
    'filing_fees' => '82'
)
)
这是我当前的代码:

$processed = array();
    foreach ($Data as $k => $array1) {
        foreach ($array1 as $array1k => $array2) {
            if (!isset($processed[$array1k])) {
                $processed[$array1k] = array();
            }
            foreach ($array2 as $a2k => $a2v) {
                $processed[$array1k][$a2k] = $a2v;
            }
        }
    }
我所做的工作是可行的,但它不是很“蛋糕式”,当我需要准备数据以保存更复杂的模型关系(例如,HABTM saveall)时,肯定会导致问题

在发布之前,我尝试了
Hash::combine
Hash::merge
array\u merge\u recursive()
,以及这些组合。我理解PHP逻辑,但找不到具有类似逻辑的CakePHP函数

第一步是合并模型,第二步是删除键('add',add2')。最接近的是
Hash::combine
,但无法引用模型的
$keyPath{s},跳过数组的第一级('add','add2')


如果您能告诉我建议使用哪些哈希或其他CakePHP函数,我很乐意采取下一步。

您是否按照要求尝试了一些哈希类代码?我看不出有什么实际问题,你只要试一下,看看你是否碰到了墙。或者你有没有尝试过某个东西,但由于X和Y的原因它不起作用?在发布之前,我尝试了Hash::combine、Hash::merge、array\u merge\u recursive()以及这些组合。我理解PHP逻辑,但找不到具有类似逻辑的CakePHP函数。第一步是合并模型,第二步是删除键('add',add2')。我得到的最接近的是Hash::combine,但无法引用模型的$keyPath{s},跳过了数组的第一级('add','add2')。如果你能告诉我推荐使用哪些散列函数或其他CakePHP函数,我很乐意采取下一步。我发现了这个沙盒,它非常有用!它显示了每个数组合并的工作方式。解决我的示例的最佳工具是array\u merge\u recursive()。我感到惊讶的是,没有一种“CakePHP方法”来准备具有已知模型名的数组以进行保存。或者这可能是我使用的插件的一个缺点。尽管如此,我认为出于各种原因,其他人在保存之前将需要类似的阵列准备。
$processed = array();
    foreach ($Data as $k => $array1) {
        foreach ($array1 as $array1k => $array2) {
            if (!isset($processed[$array1k])) {
                $processed[$array1k] = array();
            }
            foreach ($array2 as $a2k => $a2v) {
                $processed[$array1k][$a2k] = $a2v;
            }
        }
    }