在数组中显示csv文件

时间:2016-06-17 07:48:13

标签: php arrays csv

我有一个.csv文件。某些字段为空,某些字段为逗号或点。

现在我怎么能在数组中这样显示它?

Array (

 [0] => Name1,name1@yahoo.com,13,56475,,190000,,,remit,5-Mar-15,26250

 [1] => Name2,name2@yahoo.com,11,11250,,22500,,,the bank,30-Apr-15,6250

 [2] => Name3,name3@yahoo.com,15,,,1500,receipt,,the market,7-Mar-15,1750

 [3] =>Name4,name4@yahoo.com,21,25500,,46750,receipt,,bank ,7-Mar-15,21350 ..... )

截至目前,我只能这样显示:

Array (

 [0] => Name1
 [1] => name1@yahoo.com
 [2] => 13
 [3] => 56475
 [4] => 
 [5] => 19000
 [6] => 
 [7] => 
 [8] => remit
 [9] => 5-Mar-15
 [10] => 26250 ) 


Array (
 [0] => Name2
 [1] => name2@yahoo.com
 [2] => 11
 [3] => 11250
 [4] => 
 [5] => 22500
 [6] => 
 [7] => 
 [8] => the bank
 [9] => 30-Apr-15
 [10] => 6250 ) ....

我正在使用此代码:

$file = fopen("pay.csv","r");
while(! feof($file))
{
 echo '<pre>',print_r(fgetcsv($file)),'</pre>';
}
fclose($file);

我更喜欢使用原生csv函数。

4 个答案:

答案 0 :(得分:2)

如果您的预期输出位于顶部,则可以使用file()方法将文件解析为数组。

$lines = file('file.csv');

foreach ($lines as $line_num => $line) {
 echo $line . '<br />';
}

答案 1 :(得分:1)

fgetcsv()可以解决您的问题..

fgetcsv()函数从打开的文件中解析一行,检查CSV字段。

  • fgetcsv()函数停止在新行上返回 指定的长度,或在EOF,以先到者为准。

  • 此函数在成功时返回数组中的CSV字段,或者为FALSE 失败和EOF。

<强>语法

fgetcsv(文件,长度,分离器,附文)

  • 档案必填。指定要检查的文件。
  • 长度:指定行的最大长度。必须大于CSV文件中的最长行(以字符为单位)。省略这一点 参数(或设置为0)的行长度不受限制 有点慢。

示例:

<?php
$file = fopen("contacts.csv","r");
print_r(fgetcsv($file));
fclose($file);
?>

CSV文件:

Kai Jim, Refsnes, Stavanger, Norway
Hege, Refsnes, Stavanger, Norway

上面代码的输出将是:

Array
(
[0] => Kai Jim
[1] => Refsnes
[2] => Stavanger
[3] => Norway
)

访问http://php.net/manual/en/function.fgetcsv.php以获取更多参考资料。

答案 2 :(得分:1)

遵循此示例:http://php.net/manual/en/function.fgetcsv.php#example-2613

if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $filteredData = array_filter($data, function($item) {
            return '' !=== $item;
        });
        echo implode(', ', $filteredData), PHP_EOL;
    }
    fclose($handle);
}

但是,不应打印implode(', ', $filteredData),而应删除array_filter()并使用以下CSS打印implode('</span><span class="comma">', $data)

.comma {
  background-color: red;
  padding: 2px 5px;
}
.comma:empty {
  display: none;
}
.comma + .comma {
  margin-left: 20px;
}

新的PHP代码:

if (($handle = fopen("test.csv", "r")) !== FALSE) {
    echo '<div class="csv">';
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        echo '<div><span class="comma">';
        echo implode('</span>, <span class="comma">', $data), PHP_EOL;
        echo '</span></div>';
    }
    fclose($handle);
    echo '</div>';
}

答案 3 :(得分:0)

通过用逗号分隔每个值来读取csv文件。如果您的值包含昏迷本身,那么它将被视为多个值 例 如果你有一个值B,C和一个值A. 如果你把css写为B,C,A,那么它将自己视为B C和A. 避免这样的问题。使用诸如引号或双引号等封闭空间 “B,C”, “A”