处理多维$ _FILES数组

let*_*ngo 4 php multidimensional-array

我有以下$_FILES数组从支持表单处理过来

Array
(
    [file] => Array
        (
            [name] => Array
                (
                    [0] => Test.jpg
                    [1] => Test.doc
                    [2] => Test.php
                    [3] => 
                )

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

            [tmp_name] => Array
                (
                    [0] => /tmp/phpCO0vSD
                    [1] => /tmp/phpEFpp3Q
                    [2] => /tmp/phpwN4Iwc
                    [3] => 
                )

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

            [size] => Array
                (
                    [0] => 1305787
                    [1] => 339773
                    [2] => 480098
                    [3] => 0
                )

        )

)
Run Code Online (Sandbox Code Playgroud)

我的主要问题是理解处理数组所需的逻辑,检查每个文件是否有效(我已经有一个有效扩展列表)然后重新命名并妥善存储文件.

对于我的简单要求,Google和SO上的解决方案都相当复杂.

zer*_*kms 6

以下是遍历数组的方法:

foreach ($_FILES['file']['name'] as $key => $name) {
    echo $name;
    echo $_FILES['file']['type'][$key];
    echo $_FILES['file']['tmp_name'][$key];
}
Run Code Online (Sandbox Code Playgroud)

有了这个循环,你可以轻松地做你想做的事.


seo*_*uru 5

foreach()非常喜欢,我总是这样...

$files = array();
foreach ($_FILES['files']['name'] as $num_key => $dummy) {
    foreach ($_FILES['files'] as $txt_key => $dummy) {
        $files[$num_key][$txt_key] = $_FILES['files'][$txt_key][$num_key];
    }
}
Run Code Online (Sandbox Code Playgroud)

...然后我foreach($files as $file)再次使用来很好地处理数据.:)

当然,来自zerkms的答案更快,但这对于任何情况重新排序数组逻辑都是一般的方法 - 你必须走两次(x*y).