如何使两个foreach具有相同的变量?

时间:2017-08-03 01:54:22

标签: 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").$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中添加一些内容,但我不想删除任何内容(日期时间格式应该存在)

2 个答案:

答案 0 :(得分:0)

如果你需要从第一个循环中捕获确切的文件名,为什么不在第一个只存储文件名的循环中构建一个数组呢?然后,您可以通过$ rows的值引用数组,而不是尝试重建名称。 (这也取决于这两个循环之间的内容。)

答案 1 :(得分: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;
}

请注意我没有对此进行测试,我在这里编码是盲目的,但这应该足以让你到那里。