2017-08-03 66 views
1

我有一個上傳多個文件的功能。我使用兩個foreach來上傳文件。在第一個的foreach,我環路上傳的文件,如何使兩個foreach具有相同的變量?

$j_upl  = count($my_upload["name"]); 
$isUploaded = 0; 
$files  = $_FILES; 

for($i=0;$i<$j_upl;$i++){ 

    $random_name    = substr($my_upload["name"][$i],0,-4)."_".date("ymdhis").$i.substr($my_upload["name"][$i],-4); 
    $this->load->library('upload', $config); 

    $_FILES['upload_act']['name']  = $files['upload_act']['name'][$i]; 
    $_FILES['upload_act']['type']  = $files['upload_act']['type'][$i]; 
    $_FILES['upload_act']['tmp_name'] = $files['upload_act']['tmp_name'][$i]; 
    $_FILES['upload_act']['error']  = $files['upload_act']['error'][$i]; 
    $_FILES['upload_act']['size']  = $files['upload_act']['size'][$i]; 

    $this->upload->initialize($config); 


    $this->upload->do_upload('upload_act'); 

} 

$random_name,我用.date("ymdhis")被添加到file_name中。所以,該文件將被重命名爲the file name."_".datetime uploded

在第二個foreach中,我使用它將$random_name插入到數據庫中。

foreach($details as $rows){    

    $file_name = substr($rows['val_upl'],0,-4)."_".date("ymdhis").$ii.substr($rows['val_upl'],-4);    

    $dt_act['UPL_FILENAME']  = ($rows['val_upl'] == "") ? NULL : $file_name.$ii;    

    $this->MProject->ins_activity_m($dt_act); 
    $ii += 1; 
} 

我用同樣的方法得到$file_name。如果我上傳大約2-3個文件,則$file_name$random_name匹配。但是,如果有更多文件需要上傳,則開始與$random_name不匹配,因爲('Ymdhis')中的第二個不同。

獲得$random_name$random_name匹配的最佳方法是什麼,以便插入的file_name與上傳的file_name匹配?

注:

  • 我可以添加一些東西到FILE_NAME,但我寧願不刪除任何東西(日期時間格式應該存在)
+0

這是否重要,日期是確切的第二次上傳。爲什麼不用你的變量將'date()'移動到循環外部,並將它分配給一個變量並將其傳遞給兩個循環?您仍然可以獲得代碼開始處理批處理的確切時間,而不是單獨處理。 –

+0

@MatthewBrent是的,我也需要秒爲另一個目的。 – Vahn

+0

爲什麼不只是在循環中生成'$ random'值_before_,你可以附加到所有的上傳文件名?而不是依靠'date()'? –

回答

0

解決此問題的最簡單方法是在第一個for循環中創建一個關聯數組,並將所需的信息作爲鍵值對傳入。你不通過這個對象需要循環,你可以你的循環中使用你已經知道的值鍵,如現有的文件名來訪問像下面的值...

$file_uploads = array(); 

for($i=0;$i<$j_upl;$i++){ 

$random_name = substr($my_upload["name"][$i],0,-4)."_".date("ymdhis").$i.substr($my_upload["name"][$i],-4); 

$file_uploads[$my_upload["name"][$i]] = array(
    'new_name' => $random_name, 
    'some_other_value' => $some_other_var 
); 

$this->load->library('upload', $config); 

$_FILES['upload_act']['name']  = $files['upload_act']['name'][$i]; 
$_FILES['upload_act']['type']  = $files['upload_act']['type'][$i]; 
$_FILES['upload_act']['tmp_name'] = $files['upload_act']['tmp_name'][$i]; 
$_FILES['upload_act']['error']  = $files['upload_act']['error'][$i]; 
$_FILES['upload_act']['size']  = $files['upload_act']['size'][$i]; 

$this->upload->initialize($config); 


$this->upload->do_upload('upload_act'); 

} 


foreach($details as $rows){    

$file_name = $file_uploads[substr($rows['val_upl']]['new_name'];    

$dt_act['UPL_FILENAME']  = ($rows['val_upl'] == "") ? NULL : $file_name.$ii;    

$this->MProject->ins_activity_m($dt_act); 
$ii += 1; 
} 

請注意我沒有測試過這個,我在這裏編碼盲,但這應該足以讓你在那裏。

+0

'previousCode.date('ymdhis')'是什麼? – Vahn

+0

它只是僞代碼...用你所有的代碼替換previousCode –

+0

哦好吧。我會試試看。 – Vahn

0

如果您需要捕獲從確切的文件名第一個循環,爲什麼不在剛剛存儲文件名的第一個循環中創建一個數組?然後,您可以通過$ rows的值引用數組,而不是嘗試重建名稱。 (這也取決於這兩個循環之間的內容。)

+0

如何循環第二個foreach中的數組? – Vahn

+0

見下文Vahn ...這只是僞代碼,但我可以澄清,如果你需要它。 –

相關問題