PHP将数组数组转换为一个字符串或一个大数组

PHP将数组数组转换为一个字符串或一个大数组,php,arrays,loops,Php,Arrays,Loops,这段代码打开文件夹中的所有excel文件,然后打开文件中的所有电子邮件并将它们放入数组中。最后,我需要从所有数组的所有内容中选择一个大数组。我需要它是来自所有文件的所有电子邮件的一个大数组 下面的代码不起作用。我相信这是一个简单的问题。谢谢 <? $Folder = "sjc/"; $files = scandir($Folder); function cleanFolder($file) { $string = file_get_contents("sjc/$file"); $pa

这段代码打开文件夹中的所有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);

?>

更新:得到了TOT的工作。。然而,我现在有一个记忆问题,因为电子邮件总数超过229911封

致命错误:第33行/home/public_html/statesplus/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);

?>

=
用于连接字符串,而不是数组。但您可以将它们作为字符串保留一段时间:

$TheEmails .= ",$Emails";
然后:

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

下面是我用来从任意给定文件夹中的多个excel工作表收集多封电子邮件的最终代码文件可以是CSV、XLS、XLSX、HTML等。此代码将从文件夹中的多个页面中提取电子邮件,将它们放入一个巨大的数组。:)



Fast。谢谢我应该把这个代码放在哪里?在第一圈还是第二圈?substr和1的作用是什么?@PapaDeBeau:substr只是去掉了前面的逗号,因为第一项也得到了逗号。无论如何,
$TheEmails.=”,$Emails“
将替换其他的
$TheEmails.=…
行,
$TheEmails=explode…
将在循环之后执行。谢谢。我认为还有一个问题$Emails=cleanFolder(“$files[$i]”);将$Emails转换为和arrray转换为它实际上不是电子邮件,而是来自另一个循环的数组。与原始excel文件相比,至少转换为csv,然后获取电子邮件是一个简单的过程。您的正则表达式将与一些有效的电子邮件地址不匹配Hanks Dagon,我本来打算这么做的,但它有很多excel文件。我只知道如何手动操作。此外,这些信息远不止电子邮件。我只是在收电子邮件。是否有通过php将excel转换为csv的代码?不是通过php,而是从命令行:不带
substr
,但是,
$FinalEmails
的最后一个元素将为空。此外,您不必从数组转换为字符串再转换为数组。另外,是否使用了
$Emails
?它在没有substr的情况下也可以工作。不知道为什么。是的,本例中不使用$email。谢谢你指出这一点。我会移除它。
<?
    // 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_\-\+]+@[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);

    ?>