【问题标题】:Getting out of the inner loop and contnuing with the outer loop跳出内循环,继续外循环
【发布时间】:2013-10-08 10:22:43
【问题描述】:

我有一个 while 循环,它从 csv 获取数据。在 while 循环内部有一个条件(如果条件),如果条件为真,foreach 循环将在我们想一次将一行插入数据库的地方执行。对于 csv 的每一行,这应该继续。如果我在 csv 中有 10 行,它应该在数据库中插入所有 10 行。但是 mycode 将第一行插入 10 次。

$handle = fopen($_FILES['upcsv']['tmp_name'], "r");
$count = count(file($_FILES['upcsv']['tmp_name']));
fgetcsv($handle, 1000, ",");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
{
   $clt = mysql_query("select MCLNTLKNOFLG,MCLNTDKTRNGFRM,MCLNTDKTRNGTO from mclientmst where MCLNTCD ='".$data[1]."'");
   if(mysql_num_rows($clt)>0)
   {    
      $clts = mysql_fetch_array($clt);
      if($clts['MCLNTLKNOFLG']==1)
      {
         $i=1 ;
         foreach(range ($clts['MCLNTDKTRNGFRM'], $clts['MCLNTDKTRNGTO']) as $num)
         {
           $dkt = mysql_query("select XCMPCD from  xdockethdr where XDKTNO ='$num'");
           $ndkt = mysql_query("select XCMPCD from  xtempdockethdr where XDKTNO ='$num'");
           if(mysql_num_rows($dkt)==0 && mysql_num_rows($ndkt)==0)
           {
              $date = explode('/',$data[3]);
              $dt = $date[2].'-'.$date[1].'-'.$date[0];
              $dktid = mysql_query("select MAX(XDKTID) as maxid from xtempdockethdr");
              $maxid = mysql_fetch_array($dktid);
              $max = $maxid['maxid'] +1;
              $query = mysql_query("insert into xtempdockethdr (XCMPCD,XCLNTCD,XDKTNO,XCNSGCD,XDKTPUDATE,XDKTPUTIME,XDKTNOPKGS,XDKTMODLV,XDKTHTOCONCD,XDKTDCTVAL,XDKTDIMWT,XDKTACTWT,XUNIQUEID,XDKTID) VALUES ('".$data[0]."','".$data[1]."','".$num."','".$data[2]."','".$dt."','".$data[4]."','".$data[5]."','".$data[6]."','".$data[7]."','".$data[8]."','".$data[9]."','".$data[10]."','".$data[11]."','".$max."')");   
              $i++; 
           }
         }
      }
   }    
}
fclose($handle);
header('Location:upload_docketentry.php');

【问题讨论】:

    标签: php mysql csv


    【解决方案1】:
    1. 你需要在你的代码后面设置一个break;。 它将关闭第一个循环(foreach)并关闭。

    2. 在 sql 插入后添加 continue 2;。 这将结束此循环并进入 while 循环的开头并继续工作。

      $handle = fopen($_FILES['upcsv']['tmp_name'], "r");
      $count = count(file($_FILES['upcsv']['tmp_name']));
      fgetcsv($handle, 1000, ",");
      while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) // **#1 point**
      {
         $clt = mysql_query("select MCLNTLKNOFLG,MCLNTDKTRNGFRM,MCLNTDKTRNGTO from mclientmst where MCLNTCD ='".$data[1]."'");
         if(mysql_num_rows($clt)>0)
         {    
            $clts = mysql_fetch_array($clt);
            if($clts['MCLNTLKNOFLG']==1)
            {
               $i=1 ;
               foreach(range ($clts['MCLNTDKTRNGFRM'], $clts['MCLNTDKTRNGTO']) as $num)
               {
                 $dkt = mysql_query("select XCMPCD from  xdockethdr where XDKTNO ='$num'");
                 $ndkt = mysql_query("select XCMPCD from  xtempdockethdr where XDKTNO ='$num'");
                 if(mysql_num_rows($dkt)==0 && mysql_num_rows($ndkt)==0)
                 {
                    $date = explode('/',$data[3]);
                    $dt = $date[2].'-'.$date[1].'-'.$date[0];
                    $dktid = mysql_query("select MAX(XDKTID) as maxid from xtempdockethdr");
                    $maxid = mysql_fetch_array($dktid);
                    $max = $maxid['maxid'] +1;
                    $query = mysql_query("insert into xtempdockethdr (XCMPCD,XCLNTCD,XDKTNO,XCNSGCD,XDKTPUDATE,XDKTPUTIME,XDKTNOPKGS,XDKTMODLV,XDKTHTOCONCD,XDKTDCTVAL,XDKTDIMWT,XDKTACTWT,XUNIQUEID,XDKTID) VALUES ('".$data[0]."','".$data[1]."','".$num."','".$data[2]."','".$dt."','".$data[4]."','".$data[5]."','".$data[6]."','".$data[7]."','".$data[8]."','".$data[9]."','".$data[10]."','".$data[11]."','".$max."')");   
                    $i++; 
                    // continue 2; // Goes to #1
                    // break; // Goes to #2
                 }
               } // #2 point
               var_dump(__LINE__); // This will executed if you place break operator
            }
         }    
      }
      fclose($handle);
      header('Location:upload_docketentry.php');
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-28
      • 2012-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      相关资源
      最近更新 更多