Php 如何使两个foreach具有相同的变量?
我有一个上传多个文件的功能。我使用两个foreach上传文件。在第一个foreach中,我循环上传的文件Php 如何使两个foreach具有相同的变量?,php,codeigniter,loops,foreach,Php,Codeigniter,Loops,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")
$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');
}
我使用相同的方法来获取$file\u name
。如果我上传大约2-3个文件,则$file\u name
与$random\u name
匹配。但是,如果有更多的文件要上传,它开始与$random\u name
不匹配,因为('Ymdhis')
中的第二个文件不同
使$random\u name
与$random\u name
匹配的最佳方法是什么,以便插入的文件名与上载的文件名匹配
注:
- 我可能会在文件名中添加一些内容,但我不希望删除任何内容(datetime格式应该存在)
$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;
}
$file_uploads=array();
对于($i=0;$i$random\u name),
'some_other_value'=>$some_other_var
);
$this->load->library('upload',$config);
$\u FILES['upload\u act']['name']=$FILES['upload\u act']['name'][$i];
$\u FILES['upload\u act']['type']=$FILES['upload\u act']['type'][$i];
$\u FILES['upload\u act']['tmp\u name']=$FILES['upload\u act']['tmp\u name'][$i];
$\u FILES['upload\u act']['error']=$FILES['upload\u act']['error'][$i];
$\u FILES['upload\u act']['size']=$FILES['upload\u act']['size'][$i];
$this->upload->initialize($config);
$this->upload->do_upload('upload_act');
}
foreach($详细信息为$行){
$file_name=$file_uploads[substr($rows['val_upl']]]['new_name'];
$dt_act['UPL_FILENAME']=($rows['val_UPL']==”)?NULL:$file_name.$ii;
$this->MProject->ins\u activity\u m($dt\u act);
$ii+=1;
}
请注意我没有测试过这一点,我在这里是盲编码,但这应该足以让您达到目的。解决这一问题的最简单方法是在第一个for循环中创建一个关联数组,其中包含作为键值对传入的所需信息。您不需要循环通过此对象,因为您可以使用您一直使用的键ady知道循环中的值(如现有文件名)以访问以下值
$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;
}
$file_uploads=array();
对于($i=0;$i$random\u name),
'some_other_value'=>$some_other_var
);
$this->load->library('upload',$config);
$\u FILES['upload\u act']['name']=$FILES['upload\u act']['name'][$i];
$\u FILES['upload\u act']['type']=$FILES['upload\u act']['type'][$i];
$\u FILES['upload\u act']['tmp\u name']=$FILES['upload\u act']['tmp\u name'][$i];
$\u FILES['upload\u act']['error']=$FILES['upload\u act']['error'][$i];
$\u FILES['upload\u act']['size']=$FILES['upload\u act']['size'][$i];
$this->upload->initialize($config);
$this->upload->do_upload('upload_act');
}
foreach($详细信息为$行){
$file_name=$file_uploads[substr($rows['val_upl']]]['new_name'];
$dt_act['UPL_FILENAME']=($rows['val_UPL']==”)?NULL:$file_name.$ii;
$this->MProject->ins\u activity\u m($dt\u act);
$ii+=1;
}
请注意我还没有测试过这个,我在这里是盲编码,但这应该足以让你达到目的。日期是上传的第二秒是否重要。为什么不移动
date()
在循环外部使用变量并将其分配给一个变量,然后将其传递给两个循环?您仍然可以获得代码开始处理批处理的确切时间,而不是单独处理。@MatthewBrent是的,我还需要秒数用于另一个目的。为什么不在执行循环之前生成一个$random
值呢可以附加到所有上传文件名吗?与其依赖于date()
?@giolliansulit,我需要文件名中的日期时间。那么,将date(“ymdhis”)
作为变量存储在循环之前并将其串联在一起?日期是上传的第二个日期是否重要?为什么不移动date()
在循环外部使用变量并将其分配给一个变量,然后将其传递给两个循环?您仍然可以获得代码开始处理批处理的确切时间,而不是单独处理。@MatthewBrent是的,我还需要秒数用于另一个目的。为什么不在执行循环之前生成一个$random
值呢可以附加到所有上传文件名吗?我不需要依赖日期()
?@giolliansulit,我需要在文件名中输入日期时间。然后输入日期(“ymdhis”)
并将其作为变量存储在循环之前并将其串联在一起?如何在第二个foreach中循环数组?请参见下文Vahn…这只是伪代码,但我可以澄清您是否需要它。如何在第二个foreach中循环数组?请参见下文Vahn…这只是伪代码,但我可以澄清您是否需要它。什么是previousCode.date('ymdhis')
?它只是伪代码…用你所有的代码替换以前的代码哦,好吧。我会试试。试试我更新的代码…正如我在回答中所说的,我还没有测试过它,但你应该更清楚地遵循它。这对Vahn有帮助吗?如果有帮助,请接受答案。什么是previousCode.d