簡體   English   中英

從CSV文件獲取隨機電子郵件地址

[英]Get random email address from CSV file

我正在開發一個PHP應用程序,需要從CSV文件中提取5個隨機電子郵件地址並將其發送給用戶。

我已經使用CSV文件很多次了,但不知道如何在限制范圍內隨機獲取。

NOTE: CSV file have more than 200k emails.

任何人有想法或建議,請發給我。

如果CSV太大而無法保存在數據庫中

您必須循環遍歷CSV中的所有行才能對它們進行計數。

您必須調用一個隨機數生成器函數( randmt_rand ,others ...)並將其參數化以輸出從0$count ,並調用5次(以獲取5個數字)。

您將不得不再次遍歷CSV中的所有行,並且僅復制編號與隨機生成的值匹配的行的必要信息。

注意:請勿將file_get_contentsstr_getcsv一起str_getcsv 而是將fopenfgetcsv一起使用。 第一種方法將整個文件加載到我們不想執行的操作中。 第二種方法僅逐行讀取文件。

如果CSV太大,將保存在數據庫中

循環瀏覽CSV行,並將每個記錄插入數據庫。

使用帶有LIMIT 5ORDER BY RAND()的選擇查詢。

如果CSV足夠小以適合內存

遍歷CSV行並創建一個包含所有行的數組。

您必須調用一個隨機數生成器函數( randmt_rand ,others ...),並將其參數化以輸出從0到數組計數的數字,然后調用5次(以獲取5個數字)。

然后按照索引號從大數組中檢索行-使用隨機生成的數字作為索引。

如果csv文件不是太大,則可以將整個文件加載到數組中,以獲得類似

e[0] = 'someone1@somewhere.com';
e[1] = 'someone2@somewhere.com';
e[2] = 'someone3@somewhere.com';

那么您可以通過e [rand(0,sizeof(e))]選擇隨機電子郵件;

並執行5次(檢查雙項)

從CSV中讀取所有電子郵件,然后從電子郵件數組中隨機選擇5封電子郵件。 要選擇5個隨機數,請使用array_rand函數。

$email = array('test@test.com','test2@test.com','test3@test.com','test4@test.com','test5@test.com');
$output = array_rand($email, 5);

print_r($email); // will return random 5 email.

對於大量嘗試使用類似

$max = count($email);
$email_rand = array();
for ($i =0; $i<5; $i++) 
{
    $a = mt_rand(0, $max);
    $email_rand[] = $email[$a];
}
print_r($email_rand);
<?php
$handle = fopen('test.csv', 'r');
$csv = fgetcsv($handle);

function randomMail($key)
{
    global $csv;
    $randomMail = $csv[$key];
    return $randomMail;
}

$randomKey = array_rand($csv, 5);
print_r(array_map('randomMail', $randomKey));

這是一個小工具,可以實現您所期望的功能,並根據需要更改randomMail函數的聲明。

for($i=0;$i<5;$i++)
{
$cmd = "awk NR==$(($"."{RANDOM} % `wc -l < ~/Downloads/email.csv` + 1)) ~/Downloads/email.csv >> listemail.txt";
$rs = exec($cmd);
}

從listmail.txt中讀取列表郵件之后

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM