【问题标题】:Merge the inner array to the parent array using hash of cakephp使用 cakephp 的哈希将内部数组合并到父数组
【发布时间】:2026-01-21 07:35:02
【问题描述】:

我有以下数组

$array['projects'] = [
    'name1' => [
        'task' => [
            'tags' => ['value1', 'value2'],
            'email' => 'email2',
            'description' => 'mpla'
        ],
        'email' => 'email1',
        'tags' => ['value1', 'value3'],
        'title' => 'mpla'
    ]
];

我是否可以使用 CakePHP 3 的 Hash 类或其他 CakePHP 框架类来实现以下结果:

$array['projects'] = [
    'name1' => [
        'email' => 'email2',
        'tags' => ['value1', 'value2'],
        'title' => 'mpla'
        'desciption' => 'mpla'
    ]
];

如果您还知道任何其他可以处理数组并完成我的工作的包。

【问题讨论】:

    标签: php arrays cakephp multidimensional-array cakephp-3.0


    【解决方案1】:

    不确定这是否可以使用 Cake 的 Hash 实用程序轻松实现。您可以使用combine() 轻松提取由task 索引的数组项,但不确定如何提取title 值并使用哈希将这些值与其他数组元素组合:-

    Hash::combine($array, 'projects.{s}', 'projects.{s}.task');
    

    也许最简单的解决方案是像这样使用foreach 循环:-

    $data = [];
    foreach ($array['projects'] as $value) {
        $data['projects'] = $value['task'] + ['title' => $value['title']];
    }
    

    【讨论】:

    • 基本上我的数组比我写的例子要深得多,而 foreach 不是那么好的选择。
    • 我认为您所要求的超出了 Hash 实用程序的范围。哈希实际上使用for 循环来构建更改后的数组,所以我怀疑foreach 循环是您的最佳选择。如果您的实际问题比您发布的更复杂,您也许可以采用循环和哈希方法的组合方法。