0

我将用一个例子来解释我的问题。

  1. 我有一组电子邮件 ID(从 db 获取,它将是动态的)。假设有 100 个电子邮件 ID

  2. 我需要用 10 个计数对它们进行分组。换句话说,100 个电子邮件 ID 除以 10 => 所以会有 10 个循环。

  3. 输出应该看起来像

Group1:---前十个电子邮件ID---

Group2:---接下来的十个电子邮件ID---。. . . ..

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>";
    }
    }
    ?>

编辑:上面的代码工作正常,我已经编辑了。感谢所有的帮助:)

4

5 回答 5

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)); 
于 2013-05-14T06:00:31.480 回答
1

当您可以将它们打印成单独的块时,我不确定为什么要将它们分成组;但是,如果我通过使用这种 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;
     }
   }
于 2013-05-14T05:58:45.893 回答
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;
 }

}

于 2013-05-14T06:07:43.447 回答
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 代码后页面输出到达浏览器(服务器端

如果你想达到这种效果,你应该努力使用输出缓冲,我不确定无论如何都是可能的。

阿贾克斯,也许吧。

于 2013-05-14T07:17:06.660 回答
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++;
}
于 2013-05-14T07:25:56.173 回答