php - 如何转置多维多文件上传提交并维护关联键?

标签 php arrays multidimensional-array file-upload transpose

我有以下形式,当发送多张图片时生成一个多维数组,所有数据默认排序。

表单 HTML 和 PHP:

<html>
    <body>
        <form enctype="multipart/form-data" action="" method="POST">
            <input name="image[]" type="file" multiple />
            <input type="submit" name="send" value="Send" />
        </form>
    </body>
</html>

发送它会生成如下数组:

$file1 = array(
    'imagen' => array(
        'name'      => array(
            'Image_name',
            'Image_name'
        ),
        'type'      => array(
            'jpg',
            'jpg'
        ),
        'tmp_name'  => array(
            'jpg',
            'jpg'
        ),
        'error'     => array(
            0,
            0
        ),
        'size'      => array(
            '200',
            '200'
        )
    )
);

我需要以更简单的方式重构这个数组,以便各个图像值在一起。

预期输出:

$file2 = array(
    array(
        'name' => 'Image_name',
        'type' => 'jpg',
        'tmp_name' => 'jpg',
        'error' => 0,
        'size' => 200
    ),
    array(
        'name' => 'Image_name',
        'type' => 'jpg',
        'tmp_name' => 'jpg',
        'error' => 0,
        'size' => 200
    )
);

最佳答案

此任务是关于“转置”数组并维护关联键。

三年后,我决定彻底修改/重写这个答案,因为编码标准远低于我现在所能容忍的水平,而且通常噪音太大。我只有两种方法可以在我自己的项目中执行此任务。两者都提供相同的(期望的)结果;区分它们的只是编码风格的问题。

Demo

$POST = [
    'image' => [
        'name' => ['Image_name1', 'Image_name2'],
        'type' => ['jpg', 'png'],
        'tmp_name' =>['jpg', 'png'],
        'error'    => [0, 0],
        'size'     => ['200', '300']
    ]
];

函数式编程:

$keys = array_keys($POST['image']);
var_export(
    array_map(
        function(...$col) use ($keys) {
            return array_combine($keys, $col);
        },
        ...array_values($POST['image'])
    )
);

语言构造语法:

foreach ($POST['image'] as $key => $entries) {
    foreach ($entries as $index => $entry) {
        $result[$index][$key] = $entry;
    }
}
var_export($result);

关于php - 如何转置多维多文件上传提交并维护关联键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43834002/

相关文章:

php - ETag header 不返回 304

python - Python 3 确保数组参数尺寸正确的方法是什么?

c - C中的多线程for循环

multidimensional-array - Minizinc:用一维数组初始化二维数组的每一行

javascript - 搜索列并返回嵌套数组中的行元素

php - yii中如何使用facebook-opengraph插件登录

php - 如何将类 ="active"设置为 codeigniter 中的导航菜单?

php - php中数组的最大键数是多少

arrays - 我如何在 Rust 中索引 C 数组?

arrays - 静态 uint8_t 数组的输入过程和类型