此代码打开一个文件夹中的所有 excel 文件,然后它获取打开的文件中的所有电子邮件并将它们放入一个数组中。最后,我需要来自所有数组数组的所有内容的一个大数组。我需要它是来自所有文件的所有电子邮件的一大数组。
下面的代码不起作用。我相信这是一个简单的。谢谢
<?
$Folder = "sjc/";
$files = scandir($Folder);
function cleanFolder($file)
{
$string = file_get_contents("sjc/$file");
$pattern = '/[a-z0-9_\-\+]+@[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);
?>
更新:开始工作了。但是我现在遇到了内存问题,因为电子邮件总数超过 229911。
致命错误:第 33 行 /home/public_html/StatuesPlus/CleanListFolder.php 中允许的 67108864 字节内存大小已用尽(尝试分配 71 字节)
这是有效的代码:
<?
$Folder = "sjc/";
$files = scandir($Folder);
function cleanFolder($file)
{
//echo "FILE NAME " . $file . "<br>";
$string = file_get_contents("sjc/$file");
$pattern = '/[a-z0-9_\-\+]+@[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);
?>