Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使两个foreach具有相同的变量?_Php_Codeigniter_Loops_Foreach - Fatal编程技术网

Php 如何使两个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")

我有一个上传多个文件的功能。我使用两个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');

}
我使用相同的方法来获取
$file\u name
。如果我上传大约2-3个文件,则
$file\u name
$random\u name
匹配。但是,如果有更多的文件要上传,它开始与
$random\u name
不匹配,因为
('Ymdhis')
中的第二个文件不同

使
$random\u name
$random\u name
匹配的最佳方法是什么,以便插入的文件名与上载的文件名匹配

注:

  • 我可能会在文件名中添加一些内容,但我不希望删除任何内容(datetime格式应该存在)

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

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

解决这一问题的最简单方法是在第一个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;
}
$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