首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多个字段时$_FILES数组的奇怪格式

具有多个字段时$_FILES数组的奇怪格式
EN

Stack Overflow用户
提问于 2011-01-27 23:26:34
回答 3查看 3.2K关注 0票数 4

我有一个表单,其中的一些字段如下所示:

代码语言:javascript
复制
<input type="file" name="images[]" />
<input type="file" name="images[]" />
<input type="file" name="images[]" />
<input type="file" name="images[]" />

我希望我会这样做:

代码语言:javascript
复制
Array
(
    [images] => Array
        (
            [0] => Array
                (
                    [name] => test.jpg
                    [type] => image/jpeg
                    [tmp_name] => /tmp/nsl54Gs
                    [error] => 0
                    [size] => 1715
                )

            [1] => Array
                (
                    [name] => test.jpg
                    [type] => image/jpeg
                    [tmp_name] => /tmp/nsl54Gs
                    [error] => 0
                    [size] => 1715
                )

            [2] => Array
                (
                    [name] => test.jpg
                    [type] => image/jpeg
                    [tmp_name] => /tmp/nsl54Gs
                    [error] => 0
                    [size] => 1715
                )

            [3] => Array
                (
                    [name] => test.jpg
                    [type] => image/jpeg
                    [tmp_name] => /tmp/nsl54Gs
                    [error] => 0
                    [size] => 1715
                )
        )
)

但我得到的东西是这样的:

代码语言:javascript
复制
Array
(
    [images] => Array
        (
            [name] => Array
                (
                    [0] => test.jpg
                    [1] => test.jpg
                    [2] => test.jpg
                    [3] => test.jpg
                )

            [type] => Array
                (
                    [0] => image/jpeg
                    [1] => image/jpeg
                    [2] => image/jpeg
                    [3] => image/jpeg
                )

            [tmp_name] => Array
                (
                    [0] => /tmp/nsl54Gs
                    [1] => /tmp/nsl54Gs
                    [2] => /tmp/nsl54Gs
                    [3] => /tmp/nsl54Gs
                )

            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                    [2] => 0
                    [3] => 0
                )

            [size] => Array
                (
                    [0] => 1715
                    [1] => 1715
                    [2] => 1715
                    [3] => 1715
                )

        )

)

如何以我期望的形式获得数组?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-27 23:32:56

这是完全正常的格式,它一直是这样的。如果你想要一个不同的结构,你可以在你的应用程序中转换它,如下所示:

代码语言:javascript
复制
<?php

$another_format = array();
for ($i=0; $i<count($_FILES['images']['name']); $i++){
    $another_format[$i] = array(
        'name' => $_FILES['images']['name'][$i],
        'type' => $_FILES['images']['type'][$i],
        'tmp_name' => $_FILES['images']['tmp_name'][$i],
        'error' => $_FILES['images']['error'][$i],
        'size' => $_FILES['images']['size'][$i]
    );
}

?>

祝好运!

票数 7
EN

Stack Overflow用户

发布于 2011-01-27 23:33:34

你不需要这样做,你可以很容易地使用这个结构:

代码语言:javascript
复制
foreach ($_FILES['images']['name'] as $key => $name) {
    $type = $_FILES['images']['type'][$key];
    $tmp_name = $_FILES['images']['tmp_name'][$key];
    $error = $_FILES['images']['error'][$key];
    $size = $_FILES['images']['size'][$key];

    // Do your stuff
}
票数 3
EN

Stack Overflow用户

发布于 2013-05-08 14:20:21

下面是一个函数,它可以做到这一点,并将name属性作为:

代码语言:javascript
复制
name="artist[images][]"
name="images[]"
name="image"

也适用于多个文件字段:

代码语言:javascript
复制
<input type="file" name="artist[images][]" multiple>
<input type="file" name="artist[logos][]" multiple>

PHP:

代码语言:javascript
复制
function get_files( $array ) 
{
    $output = array();
    foreach ( $array as $base_key => $file ) {
        if ( is_array($file['name']) ) {
            $file_keys = array_keys( $file['name'] );
            foreach ( $file_keys as $file_key ) {
                if ( is_array( $file['name'][$file_key] ) ) {
                    $keys = array_keys( $file['name'][$file_key] );
                    foreach ( $keys as $key ) {
                        $output[$base_key][$file_key][$key] = array ( 
                            'name' => $file['name'][$file_key][$key], 
                            'type' => $file['type'][$file_key][$key], 
                            'tmp_name' => $file['tmp_name'][$file_key][$key], 
                            'error' => $file['error'][$file_key][$key], 
                            'size' => $file['size'][$file_key][$key] 
                        );
                    }
                } else $output[$base_key][$file_key] = array( 
                    'name' => $file['name'][$file_key], 
                    'type' => $file['type'][$file_key], 
                    'tmp_name' => $file['tmp_name'][$file_key], 
                    'error' => $file['error'][$file_key], 
                    'size' => $file['size'][$file_key] 
                    );

            }
        } else $output[$base_key] = $file;
    }
    return $output;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4818275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档