有一个处理量庞大的foreach循环,想在中间设定,执行一段时间后停止N秒,再继续执行,不知道怎么写?foreach( ){
  foreach( ){
      foreach( ){
      
    }
  }
}

解决方案 »

  1.   

    这个不是很清楚,不知道PHP有没有线程,汗~~
      

  2.   

    这是可以实现的,用sleep函数,
    <?php// current time
    echo date('h:i:s') . "\n";// sleep for 10 seconds
    sleep(10);// wake up !
    echo date('h:i:s') . "\n";?>
      

  3.   

    个人观点:
    先在所有foreach之前加入:$limit=5;
    $start=time();
    再在最中间那个foreach中加入:if(time()-$start==$limit)
    sleep(2);不知这样是否可行?
      

  4.   


    $arr = array(
        0=>array("21"=>1,"19"=>1, "3"=>1),
        1=>array("19"=>2,"3"=>2),
        2=>array("21"=>3,"19"=>3),
        3=>array("25"=>4),
        4=>array("25"=>5,"19"=>5)
    );$merge = $sum = array();
    foreach ($arr as $row)
    {
        $merge = array_unique(array_merge($merge,array_keys($row)));
    }$step = 0; # 0-100
    $start = time() - $step;
    $interval = $sleep = 0.0000001; # second
    foreach ($arr as $row)
    {
        foreach ($merge as $key)
        {
           if (!isset($sum[$key])) $sum[$key]=0;
           $sum[$key] += isset($row[$key]) ? $row[$key] : 0;       if (time() - $start > $interval)
           {
               echo "sleep....\n";
               sleep($sleep);
           }
        }}
    var_export($sum);exit;自己调整下step的大小。。由于程序执行很快,想看效果的话,改成100试试
      

  5.   

    没办法,mysql太容易锁表了,宁可执行得慢些
    4楼的方法可行,看看大家还有办法没,16点结贴
      

  6.   

    un*x的话就多线程吧,pcntl_fork
    win的话优化一下foreach 里面的咚咚