2016-08-02 80 views
0

我想創建一個簡單的上傳類使用上傳多個圖像。我需要從uploadFiles方法返回文件信息,並在另一個方法(uploadGalleryImages)中使用它。但是,如果我使用返回$結果,然後foreach循環停止後第一個文件上傳。如果我不返回它並只使用print_r($ result),我可以上傳所有文件並在chrome的網絡選項卡中查看該對象。這裏是我的簡化代碼:上傳多個文件並返回文件信息作爲對象

public function uploadGalleryImages() { 
    $upload_image = $this->uploadFiles($_FILES['image']); 
} 

private function reArrayFiles($files) { 
    $array = array(); 
    $file_count = count($files['name']); 
    $file_keys = array_keys($files); 
    for ($i=0; $i<$file_count; $i++) { 
     foreach ($file_keys as $key) { 
      $array[$i][$key] = $files[$key][$i]; 
     } 
    } 
    return $array; 
} 


private function uploadFiles($files = array()) { 
    $upload_dir = IMAGE_UPLOAD_DIR; 
    $thumb_dir = $upload_dir . 'thumbnails/'; 

    $file_array = $this->reArrayFiles($files); 

    foreach ($file_array as $file) { 

     $base_name   = pathinfo($file['name'], PATHINFO_FILENAME); 
     $extension   = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); 

     $counter = 1; 
     while(file_exists($upload_dir . $file['name'])) { 
      $file['name'] = $base_name . $counter . '.' . $extension; 
      $counter++; 
     }; 

     if (move_uploaded_file($file['tmp_name'], $upload_dir . $file['name'])) { 
      $result = new \stdClass(); 
      $result->file_name = $file['name']; 
      $result->extension = $extension; 
      //print_r($result); 
      return $result; // Stops after first file uploaded 
     } else { 
      return false; 
     } 

    } 
} 
+2

將對象保存到數組? –

回答

3

將所有圖片對象存儲在數組中並返回它。簡單示例:

$pics = []; 
foreach ($file_array as $file) { 

    if (move_uploaded_file($file['tmp_name'], $upload_dir . $file['name'])) { 
     $result = new \stdClass(); 
     $result->file_name = $file['name']; 
     $result->extension = $extension; 
     $pics[] = $result; 
    } 
} 

return $pics; 
相關問題