2013-05-21 106 views
3

該代碼打開文件夾中的所有excel文件,然後打開文件中的所有電子郵件並將其放入數組中。最後,我需要來自所有陣列數組的所有內容的一個大數組。我需要它是來自所有文件的所有電子郵件的一個大陣列。PHP將數組的數組分配給一個字符串或一個BIG ARRAY

下面的代碼不起作用。我相信這是一個簡單的。由於

<? 

$Folder = "sjc/"; 
$files = scandir($Folder); 


function cleanFolder($file) 
{ 
$string = file_get_contents("sjc/$file"); 
$pattern = '/[a-z0-9_\-\+][email protected][a-z0-9\-]+\.([a-z]{2,3})(?:\.[a-z]{2})?/i'; 
preg_match_all($pattern, $string, $matches); 

$Emails[] = $matches[0]; 
return $Emails; 
} 



function beginClean($files) 
{ 
    for($i=0; count($files)>$i;$i++) 
     { 
     $Emails = cleanFolder("$files[$i]"); 
     $TheEmails .= explode(",",$Emails); 

     } 

/// Supposed to be a big string of emails separated by comma 
echo $TheEmails; // But it just echos .... ArrayArrayArrayArrayArray etc... 

// WHAT I REALLY WANT IS.. one Array holding all emails, not an Array of Arrays. 
} 

beginClean($files); 

?> 

UPDATE:GOT TOT工作。但是我現在有一個內存問題的電子郵件總數超過229911.

致命錯誤:用盡67108864個字節允許內存大小(試圖分配71上線33

這裏字節)/home/public_html/StatuesPlus/CleanListFolder.php是工作的代碼:

<? 

$Folder = "sjc/"; 
$files = scandir($Folder); 


function cleanFolder($file) 
{ 
//echo "FILE NAME " . $file . "<br>"; 
$string = file_get_contents("sjc/$file"); 
$pattern = '/[a-z0-9_\-\+][email protected][a-z0-9\-]+\.([a-z]{2,3})(?:\.[a-z]{2})?/i'; 
preg_match_all($pattern, $string, $matches); 

$TheEmails .= implode(',', $matches[0]); 
return $TheEmails; 

} 



function beginClean($files) 
{ 
    for($i=0; count($files)>$i;$i++) 
     { 
     $Emails .= cleanFolder("$files[$i]"); 
     } 



$TheEmails = explode(",", $Emails); 
//$UniqueEmails= array_unique($TheEmails); 
echo count($TheEmails); 
//file_put_contents("Emails.txt", $TheEmails); 
} 

beginClean($files); 

?> 
+1

而不是原始Excel文件至少轉換爲csv,然後讓該電子郵件是輕而易舉。你的正則表達式不匹配一些有效的電子郵件地址 – 2013-05-21 01:58:27

+0

感謝Dagon,我打算這樣做,但它有很多的Excel文件。我只知道如何手動完成。此外這個信息比電子郵件多得多。我只是拿電子郵件。有沒有一個代碼通過PHP將excel轉換爲csv? –

+1

不是通過PHP,但從命令行:http://stackoverflow.com/questions/1858195/convert-xls-to-csv-on-command-line – 2013-05-21 02:08:24

回答

2

.=用於連接字符串,而不是數組。但是你可以讓他們爲字符串一會兒:

$TheEmails .= ",$Emails"; 

然後:

$TheEmails = explode(',', substr($TheEmails, 1)); 
+0

快速。謝謝。我究竟會在哪裏放這個代碼?在第一圈還是第二圈? substr和1也是什麼? –

+0

@PapaDeBeau:'substr'只是取消了前導逗號,因爲第一個項目也得到了逗號。無論如何,'$ TheEmails。=「,$ Emails」'替換了其他$ $ TheEmails。= ...'行,並且'$ TheEmails = explode ...'在循環之後。 – Ryan

+0

謝謝。我認爲還有一個問題。 $ Emails = cleanFolder(「$ files [$ i]」);將$ Emails變成和arrray變成它實際上不是電子郵件,而是來自另一個循環的數組。 –

1

下面是我用來收集多個電子郵件從多個Excel中的任何紙張給文件夾中的最終代碼。 這些文件可以是CSV,XLS,XLSX,HTML等。並且此代碼將從該文件夾中的多個頁面抽象出電子郵件,並且將它們放入一個巨大的陣列中。 :)

<? 
    // See below for ARRAY out put called $FinalEmails 

    // SET YOUR FOLDER HERE 

    $Folder = "sjc/"; 
    $files = scandir($Folder); 


    function cleanFolder($file) 
    { 

    $string = file_get_contents("$Folder/$file"); 
    $pattern = '/[a-z0-9_\-\+][email protected][a-z0-9\-]+\.([a-z]{2,3})(?:\.[a-z]{2})?/i'; 
    preg_match_all($pattern, $string, $matches); 

    $TheEmails .= implode(',', $matches[0]); 
    $TheEmails = strtolower($TheEmails); 

    return $TheEmails; 

    } 



    function beginClean($files) 
    { 
     for($i=0; count($files)>$i;$i++) 
      { 
      $Emails .= cleanFolder("$files[$i]"); 
      } 



    $TheEmails = explode(",", $Emails); 
    $UniqueEmails= array_unique($TheEmails); 

    $Emails = implode(",", $UniqueEmails); 


    function isValidEmail($email) 

    { 
    return filter_var(filter_var($email, FILTER_SANITIZE_EMAIL), FILTER_VALIDATE_EMAIL); 
    } 


    for($i=0; count($UniqueEmails)>$i;$i++) 
    { 
     if(isValidEmail("$UniqueEmails[$i]")) 
     { 
     echo $UniqueEmails[$i] . "<br>"; 
     $FinalEmails .= "$UniqueEmails[$i],"; 
     } 
    else 
     { 
     //not valid 
     } 
    } 


    /// An ARRAY OF Emails from multiple Excel Sheeet Cleaned 
    // Cleaned of duplicates and checked if a valid email. 
    $FinalEmails = explode(",", $FinalEmails); 



    } 

    beginClean($files); 

    ?> 
+0

但是,如果沒有'substr','$ FinalEmails'的最後一個元素將是空的。此外,您不必從數組轉換爲字符串到數組。另外,是否使用'$電子郵件'? – Ryan

+0

它沒有substr工作。不知道爲什麼。是的,此示例中的$電子郵件未使用。感謝您指出了這一點。我將刪除它。 –

相關問題