PHP循环和foreach

时间:2013-05-14 05:48:31

标签: php mysql for-loop foreach

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

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

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

  3. 输出应该类似于

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

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

5 个答案:

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