我将用一个例子来解释我的问题。
-
我有一组电子邮件id(从数据库获取,它将是动态的)。假设有100个email id
-
我需要以10为计数分组。换句话说,100个电子邮件id除以10 =>所以有10个循环。
-
输出应该像
Group1:——前十个电子邮件id——
Group2上:——接下来的10个邮箱号——. . . . ..
Group3:——最后十个电子邮件id——
这是我的php代码(我已经修改/更正我的代码)
<?php
$con=mysql_connect("localhost","root","admin");
mysql_select_db("test1",$con);
$sel=mysql_query("SELECT DISTINCT emailaddress FROM userlist");
while($row=mysql_fetch_array($sel))
{
$mail[]=$row['emailaddress'];
}
$chunk = array_chunk($mail, 10);
$get_chunk_count = count($chunk);
for($i=0;$i<$get_chunk_count;$i++){
echo "Group :".$i;
echo "<br>";
echo "========";
echo "<br>";
$count_inside_count = count($chunk[$i]);
for($j=0;$j<=$count_inside_count;$j++){
echo "<pre>";
echo $chunk[$i][$j];
echo "</pre>";
}
}
?>
EDITED:上面的代码很好,我已经编辑过了。谢谢你的帮助:)
您可以使用PHP的array_chunk()函数将数组分成更小的块。
没有测试,但我认为应该非常接近。
$chunk = array_chunk($mail, 10);
$i = 0;
do
{
echo $chunk[$i] . '<br />';
$i++;
if($i == 10)
sleep(10);
} while ($i < count($chunk));
我不知道为什么你想把它们分成几组,当你可以把它们打印成单独的块;但是如果我通过使用这个php sleep方法正确理解你的目标,你应该能够打印10个id,等待10秒,然后打印下一个10个id等,直到你的完整列表耗尽。
$temp = 0;
for($i=1;$i<=$no_of_emails;$i++){
echo "stuff";
temp++;
if(temp == 10){
sleep(10);
temp = 0;
}
}
如果我理解正确,下面的代码将为您工作…
$con=mysql_connect("localhost","root","admin");
mysql_select_db("test1",$con);
$sel=mysql_query("SELECT DISTINCT emailaddress FROM userlist");
$email=mysql_fetch_array($sel);
$num_rows=mysql_num_rows($sel);
$counter = 0;
for($i=1;$i<=$num_rows;$i++){
echo $email[$i];
$counter++;
if($counter== 10){
sleep(10);
$counter= 0;
}
}
不清楚如何以及为什么要将电子邮件列表拆分为10个堆栈,顺便说一句,这是一个工作代码(正如有人指出的,你真的应该考虑PDO而不是mysql_*函数,所以我写了两个例子):
// Mysql, DEPRECATED.
//$q = mysql_connect('localhost', 'YOURDBUSER', 'YOURDBPASSWD');
//mysql_select_db('YOURDBNAME');
//$query = mysql_query('SELECT DISTINCT emailaddress FROM userlist');
//$n = mysql_num_rows($query);
// PDO
$dblink = new PDO('mysql:dbname=YOURDBNAME;host=localhost', 'YOURDBUSER', 'YOURDBPASSWD');
$query = $dblink->query("SELECT DISTINCT emailaddress FROM userlist");
$n = $query->rowCount();
$step = 10;
for($i = 0; $i < $n; $i++)
{
// Mysql
//$res = mysql_fetch_assoc($query);
// Pdo
$res = $query->fetch(PDO::FETCH_ASSOC);
if(!($i % $step))
{
// Here we have collected 10 email addresses.
echo "---SEPARATOR---n";
}
echo $res['emailaddress'] . "n";
}
编辑对于所有建议睡觉的人:这是行不通的。对于"每10秒打印10封邮件",不应该设置Sleep:页面输出在php代码执行后到达浏览器(服务器端)
如果你想达到这种效果,你应该努力使用输出缓冲,我不确定是否可能。
Ajax,也许。
您可以试试下面的代码:
$con=mysql_connect("localhost","root","admin");
mysql_select_db("test1",$con);
$sel=mysql_query("SELECT DISTINCT emailaddress FROM userlist");
$mailsGroups = array();
$i = 0;
$j = -1;
$mailsPerGroup = 10;
while($row=mysql_fetch_array($sel))
{
if ($i % $mailsPerGroup == 0) {
$j++;
$mailsGroups[$j] = array();
}
$mailsGroups[$j][]=$row['emailaddress'];
$i++;
}