Php 添加此循环的边
我正在尝试将一些文件从一个目录移动到另一个目录,我发现了这个脚本,但是这个脚本在所有文件中循环,我想要的是将这个脚本更改为只循环50个文件。守则:Php 添加此循环的边,php,Php,我正在尝试将一些文件从一个目录移动到另一个目录,我发现了这个脚本,但是这个脚本在所有文件中循环,我想要的是将这个脚本更改为只循环50个文件。守则: // Get array of all source files $files = scandir("source"); // Identify directories $source = "source/"; $destination = "destination/"; // Cycle through all source files forea
// Get array of all source files
$files = scandir("source");
// Identify directories
$source = "source/";
$destination = "destination/";
// Cycle through all source files
foreach ($files as $file) {
if (in_array($file, array(".",".."))) continue;
// If we copied this successfully, mark it for deletion
if (copy($source.$file, $destination.$file)) {
$delete[] = $source.$file;
}
}
// Delete all successfully-copied files
foreach ($delete as $file) {
unlink($file);
}
也许我没有弄清楚,但你考虑过简单的计数吗
$i = 0;
foreach ($files as $file) {
if (in_array($file, array(".",".."))) continue;
// If we copied this successfully, mark it for deletion
if($i < 50) {
if (copy($source.$file, $destination.$file)) {
unlink($source.$file); //move unlink here to avoid a second loop
}
else{
break;
}
}
$i++;
}
$i=0;
foreach($files作为$file){
如果(在数组中($file,array(“.”,“.”))继续;
//如果复制成功,请将其标记为删除
如果($i<50){
如果(复制($source.$file,$destination.$file)){
取消链接($source.$file);//将取消链接移到此处以避免第二次循环
}
否则{
打破
}
}
$i++;
}
使用for循环,而不是foreach循环
在这种情况下,for
循环更为合理,因为每次运行此代码时,您都会循环一定次数
foreach
循环用于迭代整个数组或对象
这是一种使命感。当其他程序员查看您的代码时,他们会立即知道您正在循环50次,而不是循环整个数组
// Get array of all source files
$files = scandir("source");
// Identify directories
$source = "source/";
$destination = "destination/";
for ($i=0; $i < 50; $i++) {
$file = $files[$i];
if( !$file )
break;
if (in_array($file, array(".",".."))) continue;
// If we copied this successfully, mark it for deletion
if (copy($source.$file, $destination.$file)) {
$delete[] = $source.$file;
}
}
// Delete all successfully-copied files
foreach ($delete as $file) {
unlink($file);
}
//获取所有源文件的数组
$files=scandir(“源”);
//识别目录
$source=“source/”;
$destination=“destination/”;
对于($i=0;$i<50;$i++){
$file=$files[$i];
如果(!$file)
打破
如果(在数组中($file,array(“.”,“.”))继续;
//如果复制成功,请将其标记为删除
如果(复制($source.$file,$destination.$file)){
$delete[]=$source.$file;
}
}
//删除所有成功复制的文件
foreach($delete as$file){
取消链接($文件);
}
您可以设置计数
并在循环达到50次时停止循环:
$count = 0;
$maxiterations = 50;
foreach ($files as $file) {
if ($count < $maxiterations) {
if (in_array($file, array(".",".."))) continue;
// If we copied this successfully, mark it for deletion
if (copy($source.$file, $destination.$file)) {
$delete[] = $source.$file;
}
$i++;
}
else {
break;
}
}
$count=0;
$maxiterations=50;
foreach($files作为$file){
如果($count<$maxiterations){
如果(在数组中($file,array(“.”,“.”))继续;
//如果复制成功,请将其标记为删除
如果(复制($source.$file,$destination.$file)){
$delete[]=$source.$file;
}
$i++;
}
否则{
打破
}
}
对循环使用,而不是对每个
循环使用。@Nicholas是的,我试过了,但没用:for($I=1;$I<500;$I++){if(in_数组($files,array(“.”,“.”)继续;//如果复制成功,如果(copy($source.$files,$destination.$files)){$delete[]=$source.$files;}}}即使我们在50岁时就完成了,它仍然会在所有文件中循环。编辑:啊,你已经修好了。他只想循环前50个,当你想循环一个数组中的所有东西时,通常使用foreach
。这是一种使命感。当正常的for
循环可用时,使用foreach
和break
有点愚蠢。