3

このコードは、フォルダー内のすべての Excel ファイルを開き、開いたファイル内のすべての電子メールを取得して配列に配置します。最後に、配列のすべての配列のすべてのコンテンツから ONE BIG 配列が必要です。すべてのファイルからのすべての電子メールの 1 つの大きな配列にする必要があります。

以下のコードは機能しません。これは単純なものだと確信しています。ありがとう

<?

$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);

?>

更新: GOT TOT WORK.. ただし、メールの合計が 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);

?>
4

2 に答える 2

2

.=配列ではなく、文字列の連結に使用されます。ただし、しばらくの間、それらを文字列として保持することができます。

$TheEmails .= ",$Emails";

その後:

$TheEmails = explode(',', substr($TheEmails, 1));
于 2013-05-21T01:50:23.733 に答える
1

以下は、特定のフォルダー内の複数の Excel シートから複数の電子メールを収集するために使用した最終的なコードです。ファイルは CSV、XLS、XLSX、HTML などです。このコードは、そのフォルダー内の複数のページから電子メールを抽象化し、それらを 1 つの巨大な配列に配置します。:)

<?
    // 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);

    ?>
于 2013-05-21T05:00:07.220 に答える