2016-10-23 2 views
0

У меня есть форма, представленная с одним вводом типа имени файла: photo[profile][]. Я получаю этот массив:

Array 
(
[photo] => Array 
    (
     [name] => Array 
      (
       [profile] => Array 
        (
         [0] => Chrysanthemum.jpg 
         [1] => Desert.jpg 
        ) 

      ) 

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

      ) 

     [tmp_name] => Array 
      (
       [profile] => Array 
        (
         [0] => C:\xampp\tmp\php9DCC.tmp 
         [1] => C:\xampp\tmp\php9E0B.tmp 
        ) 

      ) 

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

      ) 

     [size] => Array 
      (
       [profile] => Array 
        (
         [0] => 879394 
         [1] => 845941 
        ) 

      ) 

    ) 

) 

Итак, я хочу рекурсивную функцию, которая преобразует мой массив следующим образом:

Array 
(
    [photo] => Array 
     (
      [profile] => Array 
       (
        [0] => Array 
        (
         [name] => Chrysanthemum.jpg 
         [type] => image/jpeg 
         [tmp_name] => C:\xampp\tmp\php9DCC.tmp 
         [error] => 0 
         [size] => 845941 
        ) 
        [1] => Array 
        (
         [name] => Desert.jpg 
         [type] => image/jpeg 
         [tmp_name] => C:\xampp\tmp\php9DCC.tmp 
         [error] => 0 
         [size] => 845941 
        ) 
      ) 
    ) 
) 

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

+0

Добро пожаловать на SO. Пожалуйста, прочитайте [Какие темы я могу задать] (http://stackoverflow.com/help/on-topic) и [Как задать хороший вопрос] (http://stackoverflow.com/help/how-to -ask) И [идеальный вопрос] (http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/) И как создать [Минимальный, полный и проверяемый пример] (http://stackoverflow.com/help/mcve) SO ** не является бесплатной программой кодирования или кодирования или отладки или учебного пособия или службы поиска библиотек ** Вы также должны показать, что приложили определенные усилия для решения проблемы ваша собственная проблема. – RiggsFolly

+0

Это не ракетостроение. По крайней мере, попытайтесь сделать это для себя. Тогда, если вы терпите неудачу, вы можете обратиться за помощью к нам – RiggsFolly

+0

Я действительно пытался это сделать. Я не могу понять, что так плохо в этом примере. Я знаю, что может сделать несколько циклов и решить мою проблему, потому что это не очень умно и полезно ... – Dumitru

ответ

1

Нет родной, просто используйте петлю.

$result = array(); 

foreach($_FILES as $key => $value){ 
    foreach($value as $key2 => $value2){ 
     foreach($value2 as $key3 => $value3){ 
      foreach($value3 as $index => $value4){ 
       $result[$key][$key3][$index][$key2] = $value4; 
      } 
     }   
    }   
} 
+0

Это хорошо, но что, если мой массив нас глубже? Вот и возникла проблема. Вот почему мне нужна рекурсивная функция. В любом случае, спасибо. – Dumitru

1

Решение с помощью функции array_column (доступна с PHP 5.5) и array_column функции:

if (isset($_FILES['photo'])) { 
    $quantity = count($_FILES['photo']['size']['profile']);   
    $photos = array_column($_FILES['photo'], 'profile'); 
    $ordered_list = ['photo' => ['profile' => []]]; 

    for ($i = 0; $i < $quantity; $i++) { 
     $ordered_list['photo']['profile'][] = array_combine(['name', 'type', 'tmp_error', 'error', 'size'], array_column($photos, $i)); 
    }   
} 

Теперь $ordered_list содержит необходимые сгруппированных данных

Смежные вопросы