У меня есть следующий 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-массивам … name1, name2, name3. Я хотел бы иметь доступ к каждому вспомогательному массиву, чтобы я мог перемещать их соответственно
Я использую что-то вроде этого, попробуйте;
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"; } }
не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'])); массив ( [файл] => Массив ( [name] => Массив ( [0] => Бабочка-обои-бабочки-604274_1024_768.jpg [1] => winter-wallpaper-by_karil.png ) [type] => Array ( [0] => image / jpeg [1] => image / png ) ... массив ( [0] => Массив ( [имя] => Бабочка-обои-бабочки-604274_1024_768.jpg [type] => image / jpeg [tmp_name] => C: \ Windows \ Temp \ php4C16.tmp [error] => 0 [размер] => 212399 ) [1] => Массив ( [name] => winter-wallpaper-by_karil.png [type] => image / png [tmp_name] => C: \ Windows \ Temp \ php4C36.tmp [error] => 0 [size] => 146146 ) )
Я думаю, что лучший способ справиться с этим – реорганизовать код, который генерирует массив, так что связанные поля объединяются. Возможно, такая структура, как:
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']); } }