2013-10-09 35 views
-1

在foreach功能無法正常工作,因爲我想到:的foreach功能工作不正常

<?php 

$folders = scandir('../Users/'); 
foreach($folders as $item): 
    if ((substr($item, 0, 1) == '.') || (preg_match("/\.php$/", $item))) 
      continue; 

    if (is_dir("../Users/$item")) 
      $target_folders = @scandir("../Users/$item/processed/"); 
    foreach($target_folders as $target_item){ 

     if ((!preg_match("/^[.]/",$target_item)) 
      || (!is_dir("../Users/$item/processed/$target_item"))){ 
      if ((substr($target_item, 0, 1) == '.')) 
      continue;  
      } 
     } 
     $srcfile= ("../Users/$item/processed/".$target_item); 
     $dstfile= ("processed/".$target_item); 
     copy($srcfile, $dstfile); 
     unlink($srcfile); 
endforeach; 
array_map('unlink', glob("processed/*.zip")); 
?> 

老實說,我不知道什麼是它會錯,因爲它的重複運行就好了。現在它只移動其中一個文件,而不是移動所有文件。正如我所說,如果您希望我發佈該信息以及讓我知道,那麼它的重複作品就好了。

+3

鳥巢代碼正確,你會看到更容易的是移動的文件是不是在foreach裏面,所以它會只移動一個文件 –

+1

只是一些建議,更多的人會看你的問題,如果你縮進你的代碼時,它複製到SO –

回答

1

移動邏輯是外循環,我想這裏是正確的版本:

$folders = scandir('../Users/'); 
foreach($folders as $item) 
{ 
    if ((substr($item, 0, 1) == '.') || (preg_match("/\.php$/", $item))) 
     continue; 
    if (is_dir("../Users/$item")) 
    { 
     $target_folders = @scandir("../Users/$item/processed/"); 
     foreach($target_folders as $target_item) 
     { 
      if ((!preg_match("/^[.]/",$target_item)) || (!is_dir("../Users/$item/processed/$target_item"))) 
      { 
       if ((substr($target_item, 0, 1) == '.')) 
        continue; 
       $srcfile= ("../Users/$item/processed/".$target_item); 
       $dstfile= ("processed/".$target_item); 
       copy($srcfile, $dstfile); 
       unlink($srcfile); 
      } 
     } 
    } 
} 
array_map('unlink', glob("processed/*.zip")); 
+0

工作謝謝是我想知道爲什麼另一個工程然後大聲笑 – TechLifeForgotten