【问题标题】:read the csv file column wise明智地阅读 csv 文件列
【发布时间】:2014-05-31 10:41:57
【问题描述】:

我想逐列读取 csv 文件并将每一列数据放入指定的数组中

[country]
Array(
[0]=>Australia
)
[city]
Array(
[0]=>vic
)

【问题讨论】:

    标签: php csv fgetcsv


    【解决方案1】:

    你可以使用fgetcsv函数:

    if (($handle = fopen("inputfile.csv", "r")) !== false) {
        $filesize = filesize("inputfile.csv");
        $firstRow = true;
        $aData = array();
        while (($data = fgetcsv($handle, $filesize, ";")) !== false) {
            if($firstRow) {
                $aData = $data;
                $firstRow = false;
            } else {
                for($i = 0;$i < count($data); $i++) {
                    $aData[$i][] = $data[$i];
                }
            }
        }
        fclose($handle);
    }
    

    所以你会得到一个带有第一行标题的多维数组。

    【讨论】:

      【解决方案2】:

      您可以像往常一样使用 fopen() 打开文件,使用 fgets() 获取每一行,然后像这样在每个逗号上简单地分解它:

      <?php
          $handle = @fopen("/tmp/inputfile.txt", "r");
          if ($handle) 
          {
              while (($buffer = fgets($handle)) !== false) 
              {
                  $array=explode(",",$buffer);
                  print_r($array)
                  // You have your array at this point.
              }
              if (!feof($handle)) 
              {
                  echo "Error: unexpected fgets() fail\n";
              }
              fclose($handle);
          }
      ?>
      

      【讨论】:

      • 好的,谢谢,如果我得到了像列一样的数组,这会很好。像 id 列有一个不同的数组对应的键,名称为不同的数组。
      • 对不起,我不明白你在问什么。您可以编辑您的问题以添加您的意思吗?
      • 好的,请再次检查问题,我将制作两个不同的数组。我希望你清楚我需要什么。
      【解决方案3】:

      没有一个不必要的cicle:

      $handle = fopen($name, "r");
      
          $first_row = true;
          $final_ata = array();
          $headers = array();
      
          while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {           
              if($first_row) {
                  $headers = $data;
                  $first_row = false;
              } else {
                  $final_ata[] = array_combine($headers, array_values($data));
              }
          }
      
          echo '<pre>';
          print_r($final_ata);die;
      

      会给你结果:

      Array
      (
      [0] => Array
          (
              [column1] => value
              [column2] => value
              [column3] => value
          )
      
      [1] => Array
          (
              [column1] => value
              [column2] => value
              [column3] => value
          )
      
      [2] => Array 
      

      .......

      【讨论】:

        【解决方案4】:

        这是一个逗号分隔的值,不完全是按列。如果您在列值中有逗号,那么它也会破坏您的字符串。

        $file = $_FILES['file']['tmp_name']; $handle = fopen($file, "r");

              while(($filesop = fgetcsv($handle, 100000, ",")) !== false){
               $abc= $filesop[0];
               $xyz= $filesop[1];
              }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-01-16
          • 2019-08-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多