繁体   English   中英

PHP循环和foreach

[英]PHP Looping and foreach

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

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

  2. 我需要将它们分组为10。换句话说,将100个电子邮件ID除以10 =>因此,将有10个循环。

  3. 输出应该看起来像

组1:---前十个电子邮件ID ---

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

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

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

您可以利用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;
 }

}

尚不清楚为什么要将电子邮件列表分成十个堆栈,这是一个有效的代码(正如有人指出的那样,您确实应该考虑使用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代码执行后,页面输出到达浏览器( 服务器端

如果要实现这种效果,则应努力使用输出缓冲,并且不确定是否仍然可以。

也许是阿贾克斯

您可以尝试以下代码:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM