PHP 导出csv

1. 导入

方法一:

public function actionImport()

{
  $result = array('status' => SUCCESS, 'message' => '');
  $extension = strtolower(end(explode('.', $_FILES['file']['name'])));
  $allowedExts = array('csv');

  if (in_array($extension, $allowedExts))
  {
    if ($_FILES["file"]["error"] > 0)
    {
      $result['status'] = FAIL;
      $result['message'] = $_FILES["file"]["error"];
    }
    else
    {
      $file = fopen($_FILES['file']['tmp_name'], 'r');
      $response = $this->checkCSVError($file);

      if ($response['result']['status'] === SUCCESS)
      {
        $calcResult = $this->getImportedData($response['file']);
        if ($calcResult['status'] === SUCCESS)
        {
          $result['originalData'] = $response['file'];
          $result['newData'] = $calcResult['data'];
        }
        else
        {
          $result['status'] = FAIL;
          $result['message'] = $calcResult['message'];
        }
      }
      else
      {
        $result = $response['result'];
      }
    }
  }
  else
  {
    $result['status'] = FAIL;
    $result['message'] = 'Please select a csv file.';
  }

  echo CJSON::encode($result);
}
private function checkCSVError($file)
{
  $row = -1;
  $result = array('status' => FAIL, 'message' => '');
  $fileData = array();
  $errorLine = array();
  $response = array('result' => '', 'file' => '');

  while ($data = fgetcsv($file))
  {
    $row++;
    if ($row === 0)
    {
      $roleIndex = array_search('role', $data);
      $nameIndex = array_search('name', $data);
      $emailIndex = array_search('email', $data);

      if (!$roleIndex || !$nameIndex || !$emailIndex)
      {
        $result['message'] = 'The data is lack.';
        $response['result'] = $result;

        return $response;
      }
    }

    if (current($data) === null)
    {
      continue;
    }

    $role = $data[$roleIndex];
    $name = $data[$nameIndex];
    $email = $data[$emailIndex];

    if (!empty($role) && !empty($name) && !empty($email))
    {
      $fileData[] = array('role' => $role, 'name' => $name, 'email' => $email);
    }
    else
    {
      $errorLine[] = ($row + 1);
    }
  }

  if ((count($errorLine) === 0) && !empty($fileData))
  {
    $result['status'] = SUCCESS;
    $response['result'] = $result;
    $response['file'] = $fileData;
  }
  else
  {
    $result['message'] = 'The line ' . join(', ',$errorLine) . ' has error. Please check.';
    $response['result'] = $result;
  }
  fclose($file);

  return $response;
}

private function getImportedData($file)
{
  $result = array('status' => SUCCESS, 'message' => '');
  foreach ($file as $row => $value)
  {
    $user = {["role"]=>$value['role'],["name"]=>$value['name'],["email"]=>$value['email']};
    $result['data'][$user['email']] = $user;
  }
  $result['data'] = array_values($result['data']);

  return $result;
}

方法二:

public function actionImport() //导入CSV 
    $filename $_FILES['file']['tmp_name']; 
    if (empty ($filename)) { 
        echo '请选择要导入的CSV文件!'; 
        exit; 
    } 
    $handle fopen($filename'r'); 
    $result $this->input_csv($handle); //解析csv 
    $len_result count($result); 
    if($len_result==0){ 
        echo '没有任何数据!'; 
        exit; 
    } 
    for ($i 1$i $len_result$i++) { //循环获取各字段值 
        $name iconv('gb2312''utf-8'$result[$i][0]); //中文转码 
        $sex iconv('gb2312''utf-8'$result[$i][1]); 
        $age $result[$i][2]; 
        $data_values .= "('$name','$sex','$age'),"; 
    } 
    $data_values substr($data_values,0,-1); //去掉最后一个逗号 
    fclose($handle); //关闭指针 
    $query mysql_query("insert into student (name,sex,age) values $data_values");//批量插入数据表中 
    if($query){ 
        echo '导入成功!'; 
    }else{ 
        echo '导入失败!'; 
    } 
} 
private function input_csv($handle{ 
    $out array (); 
    $n 0; 
    while ($data fgetcsv($handle10000)) { 
        $num count($data); 
        for ($i 0$i $num$i++) { 
            $out[$n][$i] = $data[$i]; 
        } 
        $n++; 
    } 
    return $out; 
}

2. 导出

$filename = 'file' . date('mdY') . ".csv";

$data = 'role,name,email' . "\n";

$items = [{["role"]=>'管理员',["name"]=>'小明',["email"]=>'xiaoming@163.com'},{["role"]=>'操作员',["name"]=>'小红',["email"]=>'xiaohong@163.com'},{["role"]=>'用户',["name"]=>'小刚',["email"]=>'xiaogang@163.com'}]

foreach ($items as $user)
{
  $data .=$user['role'] . ',' . str_replace(',', ' ', $user['name']) . ',' . str_replace(',', ' ', $user['email']) . "\n";
}

public function actionExportcsv($fileName, $data)
{
  header("Content-type:text/csv");
  header("Content-Disposition:attachment;filename=" . $filename);
  header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
  header('Expires:0');
  header('Pragma:public');
  echo $data;
}

posted @   李晓菲  阅读(544)  评论(0)    收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示