我将用一个例子解释我的问题。
我有一组电子邮件ID(从db中获取,它将是动态的)。我们假设有100个电子邮件ID
我需要将它们分组为10个。换句话说,100个电子邮件ID除以10 =>所以会有10个循环。
输出应该类似于
组别1: ---前十个电子邮件ID ---
组2: ---接下来十个邮件ids --- 。 。 。 。 ..
组3: ---最后十个电子邮件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>";
}
}
?>
编辑:上面的代码工作正常,我已编辑。感谢所有的帮助:)
答案 0 :(得分:3)
你可以利用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));
答案 1 :(得分:1)
我不确定为什么要将它们分成不同的块时将它们分成几组;但如果我通过使用这种PHP睡眠方法正确理解你的目标,你应该能够打印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;
}
}
答案 2 :(得分:1)
如果我理解正确 - 以下代码将对您有用......
$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;
}
}
答案 3 :(得分:1)
目前尚不清楚为什么要将电子邮件列表拆分为十个堆栈,顺便说一下这是一个有效的代码(正如有人指出的那样,你真的应该考虑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封电子邮件”不会禁止睡眠:在执行php代码后,页面输出到达浏览器(server-side)
如果你想达到这个效果,你应该用output buffering来努力,但我不确定是否可能。
Ajax,也许。
答案 4 :(得分:0)
您可以尝试以下代码:
$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++;
}