我正在开发一个PHP应用程序,我需要从CSV文件中提取5个随机电子邮件地址并发送给用户。
我已多次使用CSV文件,但不知道如何在限制中随机获取。
NOTE: CSV file have more than 200k emails.
任何人都有想法或建议,请发给我。
答案 0 :(得分:1)
您必须遍历CSV中的所有行才能计算它们。
您必须调用随机数生成器函数(rand
,mt_rand
,其他...)并对其进行参数化以输出从0
到{{1}的数字,并称之为5次(获得5个数字)。
您必须再次遍历CSV中的所有行,并仅复制其编号与随机生成的值匹配的行的必要信息。
Nota bene:不要将$count
与file_get_contents
一起使用。而是将str_getcsv
与fopen
一起使用。第一种方法将整个文件加载到我们不想做的内存中。第二种方法只能逐行读取文件。
循环CSV行并将每条记录插入数据库。
使用fgetcsv
和LIMIT 5
的选择查询。
循环遍历CSV行并创建一个包含所有这些行的数组。
您必须调用随机数生成器函数(ORDER BY RAND()
,rand
,其他...)并对其进行参数化以将数字从mt_rand
输出到数组计数,并且称之为5次(获得5个数字)。
然后通过索引号从大数组中检索行 - 使用随机生成的数字作为索引。
答案 1 :(得分:0)
如果csv文件不是太大,你可以将整个文件加载到数组中以获得类似
的内容e[0] = 'someone1@somewhere.com';
e[1] = 'someone2@somewhere.com';
e[2] = 'someone3@somewhere.com';
然后你可以通过e [rand(0,sizeof(e))]
选择随机电子邮件并执行5次(检查双项)
答案 2 :(得分:0)
从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);
答案 3 :(得分:0)
<?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
函数的声明。
答案 4 :(得分:0)
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
中读取列表邮件后