3

我是 PHP 新手,希望能够读取包含两列的 csv 文件,一列是数字(有点像 ID),另一列是整数值。我查找了 fgetcsv 函数,但我无法找到从 csv 文件中读取特定列的方法。

我想只从第二列中获取所有值,没有标题。

有什么办法吗?

这是我到目前为止所拥有的:

$file = fopen('data.csv', 'r');
$line = fgetcsv($file);

这是来自 csv 文件的一些示例数据:

ID,Value
1,243.00
2,243.00
3,243.00
4,243.00
5,123.11
6,243.00
7,180.00
8,55.00
9,243.00

任何帮助,将不胜感激。

谢谢。

4

5 回答 5

5

fgetcsv() 一次只读取文件的一行。您必须循环读取文件以获取所有内容:

$data = array();
while($row = fgetcsv($file)) {
   $data[] = $row;
}

您可以通过在循环外执行 fgetcsv 来跳过标题,以读取/删除标题值。如果你只想要第二列,你可以这样做:

   $data[] = $row[1];

但是,由于您在那里有数据,也许保留它可能会很有用,再加上用 csv 中的 ID 值键入您的新数组,因此您还可以拥有:

   $data[$row[0]] = $row[1];

然后你漂亮的闪亮新数组将几乎完全匹配 csv 中的内容,但作为由 ID 字段键入的数组。

于 2012-08-17T15:54:27.330 回答
1
$csv = array_map("str_getcsv", file("data.csv", "r")); 
$header = array_shift($csv); 
// Seperate the header from data

$col = array_search("Value", $header); 
 foreach ($csv as $row) {      
 $array[] = $row[$col]; 
}
// Iterate through data set, creating array from Value column
于 2012-08-17T15:54:40.197 回答
1
$fp = fopen($filePath, "r+");
$header = fgetcsv($fp);
while ($members = fgetcsv($fp)) {
    $i = 0;
    foreach ($members as $mem) {
        $membersArray[ $i ][ ] = $mem;
        $i++;
    }
}

$newArray = array_combine($header, array_map("array_filter",$membersArray));
于 2015-03-17T06:19:39.867 回答
1
$header = fgetcsv($h);
$rows = array();
while ($row = fgetcsv($h)) {
    $rows []= array_combine($header, $row);
}
于 2012-12-12T16:14:29.777 回答
0

你也可以使用这个类http://code.google.com/p/php-csv-parser/

<?php

require_once 'File/CSV/DataSource.php';

$csv = new File_CSV_DataSource;
$csv->load('data.csv');
var_export($csv->connect());

?>
于 2013-08-29T23:27:14.660 回答