我面前有一个大的 CSV 文件。10 列,3000 行。我正在寻找一个 PHP 库,它可以让我简单地获取给定列中的所有值。像这样的东西:
$columnValues = $file->getColumnValues('F');
我看过: http: //pear.php.net/package/Spreadsheet_Excel_Writer/
但这似乎没有我需要的东西....我可能是错的。我不寻找的是 foreach 解决方案。
我面前有一个大的 CSV 文件。10 列,3000 行。我正在寻找一个 PHP 库,它可以让我简单地获取给定列中的所有值。像这样的东西:
$columnValues = $file->getColumnValues('F');
我看过: http: //pear.php.net/package/Spreadsheet_Excel_Writer/
但这似乎没有我需要的东西....我可能是错的。我不寻找的是 foreach 解决方案。
Parse CSV 是我的最爱……虽然 PHP 的内置函数也不错……
试试这个(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;
}
或者一个像 alpha 支持的 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("/[^A-Z]+/", "", 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();
}
}