該代碼打開文件夾中的所有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);
?>
而不是原始Excel文件至少轉換爲csv,然後讓該電子郵件是輕而易舉。你的正則表達式不匹配一些有效的電子郵件地址 – 2013-05-21 01:58:27
感謝Dagon,我打算這樣做,但它有很多的Excel文件。我只知道如何手動完成。此外這個信息比電子郵件多得多。我只是拿電子郵件。有沒有一個代碼通過PHP將excel轉換爲csv? –
不是通過PHP,但從命令行:http://stackoverflow.com/questions/1858195/convert-xls-to-csv-on-command-line – 2013-05-21 02:08:24