Обработка массива файлов при мультизагрузке

23 дек. 2015 г.
(обновлено 3 нояб. 2017 г.)

При загрузке нескольких файлов массив $_FILES имеет следующую конфигурацию:

Array
(
  [name] => Array
  (
    [0] => image1.jpg
    [1] => image2.jpg
  )

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

  [tmp_name] => Array
  (
    [0] => /tmp/phpdmj3wH
    [1] => /tmp/phpD8Vewm
  )

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

  [size] => Array
  (
    [0] => 31857
    [1] => 37203
  )
)

Это может быть несколько неудобно, если нужно обработать каждый файл по очереди. Для этого массив можно переформатировать таким образом:

function reArrayFiles($files) {
    $array = array();
    $count = count($files['name']);
    $keys = array_keys($files);

    for($i = 0; $i < $count; $i++) {
        foreach($keys as $key) {
            $array[$i][$key] = $files[$key][$i];
        }
    }

    return $array;
}

Теперь делаем так:

if ($_FILES['upload']) {
    $array = reArrayFiles($_FILES['upload']);

    foreach($array as $file) {
        print 'File Name: ' . $file['name'];
        print 'File Type: ' . $file['type'];
        print 'File Size: ' . $file['size'];
    }
}

На выходе получаем следующее:

File Name: image1.jpg
File Type: image/jpeg
File Size: 31857

File Name: image2.jpg
File Type: image/jpeg
File Size: 37203