for循环踩坑

今天做一个项目的时候比较奇怪,我从csv里面读去电话号码,然后过滤,然后用for循环,然后用来发短信。伪代码如下

$result = array_unique($arr);


for ($i = 0; $i < count($result); $i++) {
    $mobile = $result[$i];
    $res = $obj->send($mobile,$content);
    $status = $res == "" ? 1 : 0;

    if ($status) {
        echo $i . '--' . $mobile . '---' . 'ok';
    } else {
        echo $i . '--' . $mobile . '---' . 'fail' . $res;
    }
    echo '<br/>';
   // continue;
    $msg_table ='send_msg_log';
    $sql = 'insert into '.$msg_table.' (mobile,content,status,error_info) values(?,?,?,?)';

    $sth = $pdo->prepare($sql);
    $sth->bindParam(1,$mobile);
    $sth->bindParam(2,$content);
    $sth->bindParam(3,$status);
    $sth->bindParam(4,$res);
    $sth->execute();

}

这个执行出来 mobile 居然会有为空的情况,我的csv里面不会有的,稍微一想 得到答案。

这里的索引其实已经变了,要么重建索引,要么用foreach。

重建索引的话 

$result = array_unique($arr);
$result = array_values($result);

for ($i = 0; $i < count($result); $i++) {
   $mobile = $result[$i];
      $res = $obj->send($mobile,$content);
   $status = $res == "" ? 1 : 0;

   if ($status) {
       echo $i . '--' . $mobile . '---' . 'ok';
   } else {
       echo $i . '--' . $mobile . '---' . 'fail' . $res;
   }
   echo '<br/>';
  // continue;
   $msg_table ='send_msg_log';
   $sql = 'insert into '.$msg_table.' (mobile,content,status,error_info) values(?,?,?,?)';

   $sth = $pdo->prepare($sql);
   $sth->bindParam(1,$mobile);
   $sth->bindParam(2,$content);
   $sth->bindParam(3,$status);
   $sth->bindParam(4,$res);
   $sth->execute();

}

这样就OK了

nickname
content