You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用CakePHP 2 Hash函数将嵌套数组转为指定索引数组?

用CakePHP 2的Hash函数重组嵌套数组

首先明确你的需求:你有这样一个嵌套数组作为输入:

array (
    0 => array (
        22 => 'One string'
    ),
    1 => array (
        8 => 'Another string'
    )
)

想要转换成以子数组的键(22、8)作为顶层索引的目标数组:

array (
    22 => 'One string',
    8 => 'Another string'
)

你之前尝试用Hash::nest没得到预期结果,这很正常——因为Hash::nest是用来把带parent_id这类字段的扁平树形数据转换成嵌套树形结构的,和你当前的需求完全不匹配,所以才会出现奇怪的输出。

其实有几种简单的方法可以实现你的目标:

方法1:用Hash::merge结合call_user_func_array

你的每个子数组都是单个键值对,直接把所有子数组合并起来就能得到目标结果:

$originalArray = array(
    array(22 => 'One string'),
    array(8 => 'Another string')
);

$result = call_user_func_array('Hash::merge', $originalArray);

call_user_func_array会把$originalArray里的每个子数组作为参数传给Hash::merge,最终合并成你想要的结构。

方法2:循环遍历合并

如果觉得上面的写法有点抽象,也可以用更直观的循环逐个合并:

$result = array();
foreach ($originalArray as $item) {
    $result = Hash::merge($result, $item);
}

每次把一个子数组合并到结果数组里,最终就能得到目标结构。

方法3:用Hash::reduce

CakePHP的Hash::reduce可以迭代处理数组,这里也能派上用场:

$result = Hash::reduce($originalArray, function($carry, $item) {
    return Hash::merge($carry, $item);
}, array());

匿名函数会把每个子数组合并到初始为空的$carry变量里,最终返回合并后的数组。

这几种方法都能得到你想要的目标数组,选哪种都可以,看你觉得哪种更易读~

内容的提问来源于stack exchange,提问作者Ângelo Rigo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:22:15