1

我有以下 print_r,它源自“多个(不是错字)文件上传”。

Array
(
[file] => Array
    (
        [name] => Array
            (
                [1] => Array
                    (
                        [0] => IMG_8502 f 5 .jpg
                        [1] => IMG_8507 f 5 .jpg
                    )

                [2] => Array
                    (
                        [0] => IMG_8508 f 5 .jpg
                        [1] => IMG_8529 f 5 .jpg
                        [2] => IMG_8612 fff 5 .jpg
                    )

                [3] => Array
                    (
                        [0] => IMG_8502 f 5 .jpg
                        [1] => IMG_8507 f 5 .jpg
                    )

            )

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

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

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

            )

        [tmp_name] => Array
            (
                [1] => Array
                    (
                        [0] => C:\wamp\tmp\php1CC.tmp
                        [1] => C:\wamp\tmp\php1FC.tmp
                    )

                [2] => Array
                    (
                        [0] => C:\wamp\tmp\php23B.tmp
                        [1] => C:\wamp\tmp\php26B.tmp
                        [2] => C:\wamp\tmp\php2AB.tmp
                    )

                [3] => Array
                    (
                        [0] => C:\wamp\tmp\php2CB.tmp
                        [1] => C:\wamp\tmp\php30A.tmp
                    )

            )

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

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

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

            )

        [size] => Array
            (
                [1] => Array
                    (
                        [0] => 2776165
                        [1] => 2380025
                    )

                [2] => Array
                    (
                        [0] => 2456713
                        [1] => 2585779
                        [2] => 1770128
                    )

                [3] => Array
                    (
                        [0] => 2776165
                        [1] => 2380025
                    )

            )

    )

)

<?php
if(isset($_FILES['file'])=== true){
$files = $_FILES['file'];
for($x = 0; $x < count($files['name'][$x]); $x++){
    $file_name = $files['name'][$x];
    $tmp_name = $files['tmp_name'][$x];
    move_uploaded_file($tmp_name, 'documents/'.$file_name);
}}?>

我想我需要嵌入另一个 for 循环来访问实际名称和 tmp 数组... name1、name2、name3。我希望能够访问每个子数组,以便可以相应地移动它们

4

2 回答 2

1

我认为您处理此问题的最佳方法是重构生成数组的代码,以便将相关字段放在一起。也许是这样的结构:

Array
(
[file] => Array
    (
        [0] => Array
            (
                [0] => Array
                    (
                        [name] => IMG_8502 f 5 .jpg
                        [type] => image/jpeg
                    )
...

然后你可以遍历文件:

foreach($files as $upload) {
    foreach($upload as $file) {
        move_uploaded_file($file['tmp_name'], 'documents/'.$file['name']);
    }
}
于 2013-01-30T20:43:17.060 回答
1

我用这样的东西,试试看;

function assoc($files) {
    // single image
    if (!is_array($files['name'])) {
        return $files;
    }

    // multiple images
    $assoc = array();
    foreach ($files as $key => $array) {
        foreach ($array as $i => $value) {
            $assoc[$i][$key] = $value;
        }
    }

    return $assoc;
}

echo '<form method="post" action="" enctype="multipart/form-data">
        File 1: <input type="file" name="file[]">
        File 2: <input type="file" name="file[]">
        <input type="submit" name="submit" value="Send">
      </form>';

// and using
if (isset($_FILES['file'])) {
    $files = assoc($_FILES['file']);
    foreach ($files as $i => $file) {
        $move =@ move_uploaded_file($file['tmp_name'], 'documents/'. $file['name']);
        if ($move === true) {
            // remove moved file from array stack
            unset($files[$i]);
        }
    }
}

// display not moved files
print_r($files);

// flash errors
if (!empty($files)) {
    foreach ($files as $file) {
        print $file['name'] ." not uploaded!\n";
    }
}

出局;

// print_r($_FILES);
// print_r(assoc($_FILES['file']));
大批
(
    [文件] => 数组
        (
            [名称] => 数组
                (
                    [0] => 蝴蝶壁纸-蝴蝶-604274_1024_768.jpg
                    [1] => 冬季壁纸-by_karil.png
                )

            [类型] => 数组
                (
                    [0] => 图像/JPEG
                    [1] => 图片/png
                )

...

大批
(
    [0] => 数组
        (
            [名称] => 蝴蝶壁纸-蝴蝶-604274_1024_768.jpg
            [类型] => 图像/JPEG
            [tmp_name] => C:\Windows\Temp\php4C16.tmp
            [错误] => 0
            [大小] => 212399
        )

    [1] => 数组
        (
            [名称] => winter-wallpaper-by_karil.png
            [类型] => 图片/png
            [tmp_name] => C:\Windows\Temp\php4C36.tmp
            [错误] => 0
            [大小] => 146146
        )

)
于 2013-01-30T21:14:34.713 回答