2016-10-23 145 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 - 問) 和[完美的問題](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包含所需的分組數據

相關問題