Проблема с загрузкой файлов с несколькими именами

Techy спросил: 28 апреля 2018 в 08:30 в: php

У меня есть несколько полей ввода файлов с общим именем и уникальным именем для каждого ввода файла. Уникальное имя используется для некоторых целей проверки.

<input name="file12 ftr_file_uploads[]" class="multi_files file " type="file">
<input name="file10 ftr_file_uploads[]" class="multi_files file " type="file">
<input name="file10 ftr_file_uploads[]" class="multi_files file " type="file">
...............

При попытке загрузить файлы в форме PHP, содержимое $ _FILES выглядит следующим образом.

    array(2) { 
   ["file1_ftr_file_uploads"]=> array(5)
        { ["name"]=> array(1) { [0]=> string(13) "Jellyfish.jpg" } 
        ["type"]=> array(1) { [0]=> string(10) "image/jpeg" } 
        ["tmp_name"]=> array(1) { [0]=> string(14) "/tmp/phpx7iId2" } 
        ["error"]=> array(1) { [0]=> int(0) } 
        ["size"]=> array(1) { [0]=> int(775702) } }
  ["file2_ftr_file_uploads"]=> array(5) 
        { ["name"]=> array(1) { [0]=> string(12) "Penguins.jpg" } 
        ["type"]=> array(1) { [0]=> string(10) "image/jpeg" } 
        ["tmp_name"]=> array(1) { [0]=> string(14) "/tmp/phpN6QWoD" } 
        ["error"]=> array(1) { [0]=> int(0) } 
        ["size"]=> array(1) { [0]=> int(777835) } } 
  }

Имя ключа массива изменено на конкатенированные имена поля ввода файла. Мне нужны имена , а не ftr_file_uploads.

Я сделал следующее:

foreach($_FILES as $keyval=>$value)
    {
          $_FILES['ftr_file_uploads'] = $_FILES[$keyval]; //removed 
           $_FILES['ftr_file_uploads'][] mentioned in the answer 
           unset($_FILES[$keyval]);
    }

Когда я использую это , Я получаю результат следующим образом.

    array(1) {
  ["ftr_file_uploads"]=>
  array(5) {
    ["name"]=>
    array(1) {
      [0]=>
      string(14) "Lighthouse.jpg"
    }
    ["type"]=>
    array(1) {
      [0]=>
      string(10) "image/jpeg"
    }
    ["tmp_name"]=>
    array(1) {
      [0]=>
      string(14) "/tmp/phpLdslxb"
    }
    ["error"]=>
    array(1) {
      [0]=>
      int(0)
    }
    ["size"]=>
    array(1) {
      [0]=>
      int(561276)
    }
  }
}

Мне нужен результат, подобный этому.

 array(1) {
  ["ftr_file_uploads"]=>
  array(5) {
    ["name"]=>
    array(2) {
      [0]=>
      string(14) "Hydrangeas.jpg"
      [1]=>
      string(5) "w.jpg"
    }
    ["type"]=>
    array(2) {
      [0]=>
      string(10) "image/jpeg"
      [1]=>
      string(10) "image/jpeg"
    }
    ["tmp_name"]=>
    array(2) {
      [0]=>
      string(14) "/tmp/phpKMwmH1"
      [1]=>
      string(14) "/tmp/phpwwHU9G"
    }
    ["error"]=>
    array(2) {
      [0]=>
      int(0)
      [1]=>
      int(0)
    }
    ["size"]=>
    array(2) {
      [0]=>
      int(595284)
      [1]=>
      int(879394)
    }
  }
}

2 ответа

Techy ответил: 28 апреля 2018 в 08:45
Мне нужно другое имя для поля ввода для некоторых проверок.
Есть решение
Daart Kote ответил: 30 апреля 2018 в 09:03
foreach ($_FILES as $name => $file) {
    $_FILES['ftr_file_uploads'][] = $file;  // [] means add $file to $_FILES['ftr_file_uploads'] array
    unset($_FILES[$name]); // remove element from $_FILES
}
Daart Kote ответил: 28 апреля 2018 в 08:47
Таким образом, вы можете назвать это следующим образом: name ="ftr_file_uploads [0]", name ="ftr_file_uploads [1]", name ="ftr_file_uploads [2]" и т. Д. У вас будут разные имена в html и массиве в php
Techy ответил: 28 апреля 2018 в 09:00
Ответ отличается от результата, который мне нужен. Результатом, который я получил, является массив (1) {["ftr_file_uploads"] = > array (5) {["name"] = > array (2) {[1] = > string (12) "Penguins.jpg" [2] = > string (9)"Koala.jpg"} ["type"] = > array (2) {[1] = > string (10)"image / jpeg" [2] = > string (10)"image / jpeg"} ......
Techy ответил: 28 апреля 2018 в 09:01
В результате мне нужен тот, который я упомянул в вопросе
Daart Kote ответил: 29 апреля 2018 в 10:38
Вы пытаетесь получить этот результат? snag.gy/FJdrv2.jpg Если да, посмотрите этот файл transfer.sh/LfId8/form.php