标签: fgetcsv

如何使用PHP解析CSV文件

假设我有一个.csv包含以下内容的文件:

 "text, with commas","another text",123,"text",5; 
 "some    without commas","another text",123,"text";
 "some text with  commas or no",,123,"text"; 
Run Code Online (Sandbox Code Playgroud)

如何通过PHP解析内容?

php csv fgetcsv

123
推荐指数
6
解决办法
25万
查看次数

fgetcsv无法读取以mac格式化的csv文件结尾的行,任何更好的解决方案?

我正在使用带有fgetcsv函数的php解析csv文件.它解析了一行中的所有内容,后来我发现,csv包含carraige返回为"\ r".我看到 - 它之前被报道为php bug.我已经通过设置php运行时配置解决了这个问题 -

ini_set("auto_detect_line_endings", "1");
Run Code Online (Sandbox Code Playgroud)

有没有更多的解决方案或这是正确的方法?

谢谢

php fgetcsv

62
推荐指数
2
解决办法
2万
查看次数

php fgetcsv返回所有行

我有以下csv文件:

upc/ean/isbn,item name,category,supplier id,cost price,unit price,tax 1 name,tax 1 percent,tax 2 name,tax 2 percent,quantity,reorder level,description,allow alt. description,item has serial number
,Apple iMac,Computers,,10,12,8,8,10,10,10,1,Best computer,,
,Apple iMac,Computers,,10,12,8,8,10,10,10,1,Best computer,,
,Apple iMac,Computers,,10,12,8,8,10,10,10,1,Best computer,,
,Apple iMac,Computers,,10,12,8,8,10,10,10,1,Best computer,,
,Apple iMac,Computers,,10,12,8,8,10,10,10,1,Best computer,,
,Apple iMac,Computers,,10,12,8,8,10,10,10,1,Best computer,,
,Apple iMac,Computers,,10,12,8,8,10,10,10,1,Best computer,,
,Apple iMac,Computers,,10,12,8,8,10,10,10,1,Best computer,,
,Apple iMac,Computers,,10,12,8,8,10,10,10,1,Best computer,,
,Apple iMac,Computers,,10,12,8,8,10,10,10,1,Best computer,,
,Apple iMac,Computers,,10,12,8,8,10,10,10,1,Best computer,,
,Apple iMac,Computers,,10,12,8,8,10,10,10,1,Best computer,,
Run Code Online (Sandbox Code Playgroud)

当我这样做:

if (($handle = fopen($_FILES['file_path']['tmp_name'], "r")) !== FALSE) 
{
    $data = fgetcsv($handle);
    var_dump($data);
}
Run Code Online (Sandbox Code Playgroud)

我得到一个包含183个元素的数组,我希望只得到一行csv,但我得到整个文件.

我甚至尝试过$data = fgetcsv($handle, 1000);,我得到了相同的结果

php fgetcsv

37
推荐指数
2
解决办法
3万
查看次数

使用fgetcsv读取CSV文件时出现UTF-8问题

我尝试读取CSV并回显内容.但内容显示错误的字符.

MäxMüstermänn - >MäxMüstermänn

CSV文件的编码是UTF-8,没有BOM(使用Notepad ++检查).

这是CSV文件的内容:

"Mäx";"Müstermänn"

我的PHP脚本

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<?php
$handle = fopen ("specialchars.csv","r");
echo '<table border="1"><tr><td>First name</td><td>Last name</td></tr><tr>';
while ($data = fgetcsv ($handle, 1000, ";")) {
        $num = count ($data);
        for ($c=0; $c < $num; $c++) {
            // output data
            echo "<td>$data[$c]</td>";
        }
        echo "</tr><tr>";
}
?>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我尝试setlocale(LC_ALL, 'de_DE.utf8');按照这里的建议使用但没有成功.内容仍然显示错误.

我错过了什么?

编辑:

一个echo mb_detect_encoding($data[$c],'UTF-8');给我UTF-8 …

php csv utf-8 fgetcsv

31
推荐指数
6
解决办法
10万
查看次数

我如何解析一个csv文件,先获取列名,然后再获取与之相关的行?

这是我的csv

column1,column2,column3,column4,column5
column1_row1,column2_row1,column3_row1,column4_row1,column5_row1
column1_row2,column2_row2,column3_row2,column4_row2,column5_row2
column1_row3,column2_row3,column3_row3,column4_row3,column5_row3
column1_row4,column2_row4,column3_row4,column4_row4,column5_row4
column1_row5,column2_row5,column3_row5,column4_row5,column5_row5
column1_row6,column2_row6,column3_row6,column4_row6,column5_row6
column1_row7,column2_row7,column3_row7,column4_row7,column5_row7
column1_row8,column2_row8,column3_row8,column4_row8,column5_row8
column1_row9,column2_row9,column3_row9,column4_row9,column5_row9
Run Code Online (Sandbox Code Playgroud)

第一行当然是列名.我试过fgetcsv(),但所有会做的就是显示所有行.而不是我想要的.我该怎么做?

因此,如果我将数据放入最后的数组中,我将能够打印出数据的表格格式,就像在excel中显示的那样.

谢谢

这是我的样本:

$filename = "upload/sample.csv";
if (($handle = fopen($filename, 'r')) !== FALSE)
{
    while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) 
    {
       print_r($row);
     }
}
Run Code Online (Sandbox Code Playgroud)

这是我的输出:(我把$行放到pre中,所以我可以显示它)

Array
(
    [0] => column1
    [1] => column2
    [2] => column3
    [3] => column4
    [4] => column5
column1_row1
    [5] => column2_row1
    [6] => column3_row1
    [7] => column4_row1
    [8] => column5_row1
column1_row2
    [9] => column2_row2
    [10] => column3_row2
    [11] => column4_row2
    [12] …
Run Code Online (Sandbox Code Playgroud)

php csv fgetcsv

18
推荐指数
2
解决办法
5万
查看次数

没有引号的CSV不能与fgetcsv一起使用

我正在尝试解析用户通过PHP上传的CSV文件,但它无法正常工作.

我已经上传了几个格式正确的CSV,但它工作得很好; 我有很多用户试图导入从Excel导出的CSV文件,但他们遇到了问题.我已将文件与我的文件进行比较,并注意到Excel文件都缺少条目周围的引号.除此之外,它们是相同的.如果我打开它并使用Open Office保存它,而不进行任何更改它是否有效.所以我很确定它与报价有关.

我的问题是; 如何阅读这些格式不正确的CSV?

更新:原因已被发现!

这特定于Mac版的Excel.由于某些任意原因,在Mac上处理换行符的方式不同,所以在使用fgetcsv之前,你应该这样做;

ini_set('auto_detect_line_endings',TRUE);
Run Code Online (Sandbox Code Playgroud)

php csv fgetcsv

12
推荐指数
1
解决办法
7938
查看次数

fgetcsv()在行的开头忽略特殊字符!

我有一个简单的脚本,它接受一个CSV文件并将每一行读入一个数组.然后,我循环遍历第一行的每一列(在我的情况下,它包含调查问题)并打印出来.调查是法语的,每当问题的第一个字符是特殊字符(é,ê,ç等)时,fgetcsv就会省略它.

值的中间的特殊字符仅在它们是第一个字符时才受影响.

我试着调试这个,但我很困惑.我做了一个var_dump与文件的内容,字符肯定在那里:

var_dump(utf8_encode(file_get_contents($_FILES['csv_file']['tmp_name'])));
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

if(file_exists($_FILES['csv_file']['tmp_name']) && $csv = fopen($_FILES['csv_file']['tmp_name'], "r"))
    {
        $csv_arr = array();

        //Populate an array with all the cells of the CSV file
        while(!feof($csv))
        {
            $csv_arr[] = fgetcsv($csv);
        }

        //Close the file, no longer needed
        fclose($csv);

        // This should cycle through the cells of the first row (questions)
        foreach($csv_arr[0] as $question)
        {
            echo utf8_encode($question) . "<br />";
        }

    }
Run Code Online (Sandbox Code Playgroud)

php csv fgetcsv

11
推荐指数
2
解决办法
1万
查看次数

fgetcsv跳过文件中的空白行

我有这个脚本,它基本上抓住了我的"logs"文件夹中的所有文件并将它们全部合并到一个数组文件中,我唯一的问题是,如果有空行或空行,有时脚本会中断!如何告诉它自动跳过空白行并转到下一行?空白行不一定在顶部或底部!可能在csv文件的中间

<?php
    $csv = array();
    $files = glob('../logs/*.*');
    $out = fopen("newfile.txt", "w");

    foreach($files as $file){
        $in = fopen($file, "r");

    while (($result = fgetcsv($in)) !== false)

        {   
            $csv[] = $result;
        }

        fclose($in);
        fclose($out);
    }

    print json_encode(array('aaData' => $csv ));
?>
Run Code Online (Sandbox Code Playgroud)

php fgetcsv

10
推荐指数
2
解决办法
2万
查看次数

php fgetcsv和整数转换(UTF8 x UCS-2 Little Endian)

更新4:

我发现(被怀疑)文件enconding负责这一点.我将csv文件从UCS-2 Little Endian转换为UTF-8,一切正常.无论如何,我需要找到一些方法让PHP正确理解输入文件.尝试已经sellocale没有成功.

---原始问题---

我有一些数据存储在'table'格式的csv文件中,我想将这些数据存储为(tag,tagtimestamp,tagvalue)在数据库上.但无法找到将存储在$ v数组中的值转换为整数值的方法:

$p=0;
$tag=array();
$dt=array();
$v=array();

$handle=fopen("sga/2013.10.054.vol2.csv", "r");

while(($row=fgetcsv($handle, 0, "\t"))!==FALSE){
    $num=count($row);
    $num--; // only even collumns
    if($p==0){
        for($c=1; $c<$num; $c+=2){
            array_push($tag, $row[$c]);
        }
    }else{
        array_push($dt, $row[0]);
        for($c=1; $c<$num;$c+=2){
            array_push($v, $row[$c]); // <<< here is my problem
        }
    }
    $p++;
}
fclose($handle);

echo "<pre>";
print_r($v);
echo "</pre>";
Run Code Online (Sandbox Code Playgroud)

呼应:

Array(
[0] => 8701
[1] => 5281
[2] => 4341
[3] => 4360
[4] => 8701
[5] => 8239
[6] => 4631
[7] => 4115 …
Run Code Online (Sandbox Code Playgroud)

php fgetcsv

10
推荐指数
1
解决办法
1002
查看次数

从 CSV 文件中删除行

我有 4 列的 .csv 文件。删除与第一列的 id 相同的行的最简单方法是什么?这是我卡住的地方:

if($_GET['id']) {
    $id = $_GET['id'];
    $file_handle = fopen("testimonials.csv", "rw");

    while (!feof($file_handle) ) {
        $line_of_text = fgetcsv($file_handle, 1024);    
        if ($id == $line_of_text[0]) {
            // remove row
        }
    }
    fclose($file_handle);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,数据库不是一种选择。

php csv fopen fgetcsv

8
推荐指数
2
解决办法
3万
查看次数

标签 统计

fgetcsv ×10

php ×10

csv ×6

fopen ×1

utf-8 ×1