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

如何结合array_walk处理多维表单数组,实现结构转换(无需foreach)

问题:如何用array_walk重组表单返回的二维数组?

我有一个表单返回的数组,结构如下:

$ticket_detail = [
    'ticket_id' => [101, 102, 103],
    'price' => [10, 20, 30]
];

目前我可以通过array_map提取单列的键值对:

$arr = array_map(function ($x) {
    return $x[0];
}, $ticket_detail);
// 输出结果:
// Array
// (
//     [ticket_id] => 101
//     [price] => 10
// )

现在需要不使用外层foreach循环,结合array_walk实现数组重组,得到如下目标结构:

Array
(
    [0] => Array
        (
            [ticket_id] => 101
            [price] => 10
        )

    [1] => Array
        (
            [ticket_id] => 102
            [price] => 20
        )
    [2] => Array
        (
            [ticket_id] => 103
            [price] => 30
        )
)

解决方案

方法一:结合内部foreach(外层无foreach)

初始化空数组后,用array_walk遍历原始数组的每个字段,将对应索引的元素填充到结果数组中:

$result = [];
array_walk($ticket_detail, function ($values, $key) use (&$result) {
    foreach ($values as $index => $value) {
        $result[$index][$key] = $value;
    }
});

print_r($result);

方法二:完全使用array_walk嵌套(无任何foreach)

先通过reset()获取子数组长度,初始化结果数组的索引结构,再用两层array_walk完成填充:

// 获取子数组的元素数量
$itemCount = count(reset($ticket_detail));
// 初始化结果数组的空索引结构
$result = array_fill(0, $itemCount, []);

// 外层遍历字段,内层遍历每个字段的元素
array_walk($ticket_detail, function ($values, $key) use (&$result) {
    array_walk($values, function ($value, $index) use (&$result, $key) {
        $result[$index][$key] = $value;
    });
});

print_r($result);

两种方法最终都能得到目标数组结构,其中方法二完全没有使用foreach循环,严格符合需求。

内容的提问来源于stack exchange,提问作者Ravi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 20:23:16