【问题标题】:PHP fgetcsv - Skip columns?PHP fgetcsv - 跳过列?
【发布时间】:2012-06-09 23:53:08
【问题描述】:

我正在尝试导入 CSV,并且能够删除列,并且只导入选定的列。

所以我有一个选定字段的数组和 CSV 文件。我可以删除行,但在跳过列时遇到问题。

这是我用来显示表格的内容,只是试图测试删除列。这里没有什么特别的。只需要知道在哪里放置任何 if 语句或任何东西。欢迎提示、建议、样品!

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
                        echo("<tr>\r\n");
                        foreach ($data as $index=>$val) {
                        echo("\t<td>$val</td>\r\n");
                        } 
                        echo("</tr>\r\n");
               } //end while

我在哪里放置任何 if 语句以只允许剩余的行?我已经尝试过 in_array、array_diff 等 - 似乎没有任何效果?

既然我正在输入这个,我应该在插入之前使用 PHP 删除列吗?什么是最佳实践?

谢谢 jt

【问题讨论】:

    标签: php fgetcsv


    【解决方案1】:

    您可以设置一个包含要显示的列的数组(在我的前 1 和 3 中),并使用 foreach 的关键部分来了解您正在扫描的列:

    <?
    $handle = fopen("test.csv", "r");
    
    $columns = array(1,3);
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            echo("<tr>\r\n");
            foreach ($data as $index=>$val) {
                    if (in_array($index+1, $columns)) {
                            echo("\t<td>$val</td>\r\n");
                    }
            }
            echo("</tr>\r\n");
    } //end while
    
    ?>
    

    【讨论】:

    • 这正是我想要的。谢谢你。反应迅速,准确。再次感谢
    【解决方案2】:

    试试:

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        echo("<tr>\r\n");
    
        foreach ($data as $index=>$val) {
            if($index != BADINDEX) {
                echo("\t<td>$val</td>\r\n");
            }   
        }
        echo("</tr>\r\n");
    }
    

    BADINDEX 是您要删除的列号(第一列为 0)。

    由于您从 fgetcsv 得到的是行而不是列,因此只需为打印的每一行过滤掉所需的列,这是通过检查 foreach 块中的索引来完成的。

    【讨论】:

      【解决方案3】:

      这是旧帖子,但我找到了另一种可能对某人有所帮助的方法:

      $file = fopen($yourcsvfile, 'r');
      
          while (($result = fgetcsv($file, 1000, ",")) !== false)
          {
              $temp = array();
              $temp[] = $result[1]; // the column you want in your new array
              $temp[] = $result[2]; // the column you want in your new array
              $csv1[] = $temp;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-02
        • 1970-01-01
        • 2021-06-13
        相关资源
        最近更新 更多