sorry_i_noob
@sorry_i_noob

PHP — массив input type="file" — получается массив полей, а не input'a. Стоит ли писать (или такие есть) функции, чтобы было проще работать с этим?

Здравствуйте. У меня в форме есть вот такой код:
<input type="file" name="book[]">
<input type="file" name="book[]">

Когда я отправляю форму, приходит вот что:
$_FILES
  book
    name[2]
    type[2]
    tmp_name[2]
    error[2]
    size[2]

И вот такой цикл уже не сработает:
foreach ($_FILES['book'] as $new_book) {
				if ($new_book['size'] != 0) { .... }
			}

Нужно писать по-другому. Но это неудобно. Есть ли какие-нибудь готовые функции, чтобы преобразовать массив так, чтобы к нему можно было обратиться через вышеприведенный код? И нужно ли это делать? Как обычно программисты работают с массивом файлов с одним name? Я просто новичок, не знаю. Мне кажется, что нужно создать новый массив, занеся в него значения этого. Но по-другому. Чтобы можно было работать уже через вышеприведенный код.
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
@ukoHka
Всего понемногу
$new_books = [];
foreach ($_FILES['book'] as $key => $array) {
    foreach ($array as $index => $value) {
        $new_books[$index][$key] = $value;
    }
}

и работать дальше с $new_books
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
$files = array_map(
           function($name, $type, $tmp_name, $error, $size) {
             return [
               'name' => $name, 
               'type' => $type, 
               'tmp_name' => $tmp_name, 
               'error' => $error,
               'size' => $size];
           }, $_FILES['name'],  $_FILES['type'], $_FILES['tmp_name'], 
           $_FILES['error'], $_FILES['size']);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы