PHP将多个上传的文件分解为变量

时间:2014-03-13 16:23:01

标签: php explode

我有一个包含多个上传输入的表单,而在此过程中,我需要将每个表单分开以便更新数据库

if(isset($_FILES['files'])){

foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){

    $file_name = $_FILES['files']['name'][$key];
    $file_size = $_FILES['files']['size'][$key];
    $file_tmp = $_FILES['files']['tmp_name'][$key];
    $file_type = $_FILES['files']['type'][$key];

    echo '<pre>'.print_r($_FILES['files'], TRUE).'</pre>';
    }
}

假设我有2个上传文件,这里是这些文件的分层视图中的数据:

Array
(
[name] => Array
    (
        [0] => model8.jpg
        [1] => leslie.jpg
    )

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

[tmp_name] => Array
    (
        [0] => C:\xampp\tmp\php906A.tmp
        [1] => C:\xampp\tmp\php906B.tmp
    )

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

[size] => Array
    (
        [0] => 13285
        [1] => 45086
    )

)

Array
(
[name] => Array
    (
        [0] => model8.jpg
        [1] => leslie.jpg
    )

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

[tmp_name] => Array
    (
        [0] => C:\xampp\tmp\php906A.tmp
        [1] => C:\xampp\tmp\php906B.tmp
    )

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

[size] => Array
    (
        [0] => 13285
        [1] => 45086
    )

)

如何将每个数据设置为变量以进行进一步处理?

谢谢!

1 个答案:

答案 0 :(得分:2)

使用此PHP函数重新排序$ _FILES数组:

<?php 
    function diverse_array($vector) { 
        $result = array(); 
        foreach($vector as $key1 => $value1){
            foreach($value1 as $key2 => $value2){
                $result[$key2][$key1] = $value2; 
            }
        }
        return $result; 
    } 
?> 

初始示例$ _FILES array:

array(1) { 
    ["upload"]=>array(2) { 
        ["name"]=>array(2) { 
            [0]=>string(9)"file0.txt" 
            [1]=>string(9)"file1.txt" 
        } 
        ["type"]=>array(2) { 
            [0]=>string(10)"text/plain" 
            [1]=>string(10)"text/html" 
        } 
    } 
} 

重新排序示例$ _FILES数组:

array(1) { 
    ["upload"]=>array(2) { 
        [0]=>array(2) { 
            ["name"]=>string(9)"file0.txt" 
            ["type"]=>string(10)"text/plain" 
        }, 
        [1]=>array(2) { 
            ["name"]=>string(9)"file1.txt" 
            ["type"]=>string(10)"text/html" 
        } 
    } 
}

使用这样的功能:

<?php $upload = diverse_array($_FILES["upload"]); ?>

现在您可以访问单个上传的文件(任意数量的文件),如下所示:

<?php

    foreach($upload as $file){
        $file_name = $file['name'];
        $file_size = $file['size'];
        $file_tmp = $file['tmp_name'];
        $file_type = $file['type'];
        $file_error = $file['error'];
    }

?>