从不带for循环的CSV文件获取列值

我有一个很大的CSV文件在我面前。 10列,3000行。 我正在寻找一个PHP库,让我只是得到一个给定的列中的所有值。 像这样的东西:

$columnValues = $file->getColumnValues('F');

我看过: http : //pear.php.net/package/Spreadsheet_Excel_Writer/

但这似乎并没有我所需要的….我可能是错的。 我不在寻找的是一个foreach解决scheme。

parsingCSV是我的最爱…虽然PHP的内置函数也没那么差…

ParseCSV

试试这个(PHP> = 5.1.0):

 echo getRowColumnValue(__DIR__.'/csvtest.csv', 2, 1); // third row, second column function getRowColumnValue($path, $row, $column, $delimiter = ';') { $file = new SplFileObject($path); $file->seek($row); //$cols = $file->fgetcsv($delimiter); // bug? gets next row $cols = str_getcsv($file->current(), $delimiter); return (isset($cols[$column])) ? $cols[$column] : null; } 

或者像阿尔法支持excel的一个小类:

 // Example 1: $file = new CsvFile(__DIR__.'/csvtest.csv'); $file->seekToRow(2); echo $file->getColumnValue('B'); // also supports integers -> echo $file->getColumnValue(1); // Example 2: $file = new CsvFile(__DIR__.'/csvtest.csv'); print_r($file->getColumnValues('B')); // get column values as array -> row 2 class CsvFile extends SplFileObject { public function __construct($filename, $delimiter = ';', $enclosure = "\"", $escape = "\\") { parent::__construct($filename); $this->setFlags(SplFileObject::READ_CSV); $this->setCsvControl($delimiter, $enclosure, $escape); } protected function _getNumber($alpha) { $alpha = preg_replace("/[^AZ]+/", "", strtoupper($alpha)); $i = 0; $len = strlen($alpha); for ($j=0;$j<$len;$j++) { $i += (ord($alpha[$j]) - 65) + ($j * 26); } return $i; } public function seekToRow($row) { $row = (is_string($row)) ? $this->_getNumber($row) : $row; $this->seek($row); } public function getColumnValue($column) { $column = (is_string($column)) ? $this->_getNumber($column) : $column; $cols = $this->current(); return (isset($cols[$column])) ? $cols[$column] : null; } public function getColumnValues($row) { $this->seekToRow($row); return $this->current(); } }