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);
}}?>

実際の名前と tmp 配列にアクセスするには、別の for ループを埋め込む必要があると思います... 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] => 配列
        (
            [名前] => 冬の壁紙 by_karil.png
            [タイプ] => 画像/png
            [tmp_name] => C:\Windows\Temp\php4C36.tmp
            [エラー] => 0
            [サイズ] => 146146
        )

)
于 2013-01-30T21:14:34.713 に答える