PHP Looping and foreach



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

  1. 我有一组电子邮件id(从数据库获取,它将是动态的)。假设有100个email id

  2. 我需要以10为计数分组。换句话说,100个电子邮件id除以10 =>所以有10个循环。

  3. 输出应该像

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++;
}

最新更新