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

PHP多维数组格式转换求助:将键嵌套数组转为索引子数组

解决PHP多维数组重组问题

嘿,处理多文件上传时经常会碰到这种数组结构转换的需求,我给你几个原生PHP的实现方案,都是简单易维护的:

方法一:基础循环遍历(最直观)

这种方法逻辑清晰,适合刚接触PHP的开发者理解,核心就是先确定文件的数量,然后逐个索引把对应位置的字段组合起来:

// 你的原始数组
$originalArray = [
    'name' => ['third.png', 'second.png', 'first.png'],
    'type' => ['image/png', 'image/png', 'image/png'],
    'tmp_name' => ['/opt/lampp/temp/phpOPmQcB', '/opt/lampp/temp/phpk0j1yp', '/opt/lampp/temp/phpS2mhVd'],
    'error' => [0, 0, 0],
    'size' => [179440, 102238, 75915]
];

$newArray = [];
// 获取文件总数(取第一个字段的长度即可,假设所有字段长度一致)
$count = count($originalArray['name']);

for ($i = 0; $i < $count; $i++) {
    $newArray[] = [
        'name' => $originalArray['name'][$i],
        'type' => $originalArray['type'][$i],
        'tmp_name' => $originalArray['tmp_name'][$i],
        'error' => $originalArray['error'][$i],
        'size' => $originalArray['size'][$i]
    ];
}

// 输出结果
print_r($newArray);

方法二:用array_map简化代码

如果想让代码更简洁,可以用array_map函数,它能把多个数组的对应元素传入回调函数,自动帮我们完成遍历:

$originalArray = [
    'name' => ['third.png', 'second.png', 'first.png'],
    'type' => ['image/png', 'image/png', 'image/png'],
    'tmp_name' => ['/opt/lampp/temp/phpOPmQcB', '/opt/lampp/temp/phpk0j1yp', '/opt/lampp/temp/phpS2mhVd'],
    'error' => [0, 0, 0],
    'size' => [179440, 102238, 75915]
];

// 把每个字段的数组作为参数传给array_map
$newArray = array_map(function($name, $type, $tmpName, $error, $size) {
    return [
        'name' => $name,
        'type' => $type,
        'tmp_name' => $tmpName,
        'error' => $error,
        'size' => $size
    ];
}, $originalArray['name'], $originalArray['type'], $originalArray['tmp_name'], $originalArray['error'], $originalArray['size']);

print_r($newArray);

方法三:通用型遍历(适合字段不固定的情况)

如果你的字段可能会动态变化,不想硬编码字段名,可以用这种通用方法,自动遍历所有字段:

$originalArray = [
    'name' => ['third.png', 'second.png', 'first.png'],
    'type' => ['image/png', 'image/png', 'image/png'],
    'tmp_name' => ['/opt/lampp/temp/phpOPmQcB', '/opt/lampp/temp/phpk0j1yp', '/opt/lampp/temp/phpS2mhVd'],
    'error' => [0, 0, 0],
    'size' => [179440, 102238, 75915]
];

$newArray = [];
// 获取所有字段名
$keys = array_keys($originalArray);
// 获取文件总数
$count = count($originalArray[$keys[0]]);

for ($i = 0; $i < $count; $i++) {
    $item = [];
    foreach ($keys as $key) {
        $item[$key] = $originalArray[$key][$i];
    }
    $newArray[] = $item;
}

print_r($newArray);

这三种方法都能实现你要的效果,第一种最直观,第二种最简洁,第三种最灵活,你可以根据自己的业务场景选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:32:53