PHP fgetcsv () - найти количество столбцов - PullRequest
6 голосов
/ 06 октября 2011

Я пытаюсь определить, сколько столбцов имеет CSV-файл.

Вот мой сценарий, который использует только первый столбец, но я бегу немного вслепую.Я хочу разместить переменную, которая ограничивает количество столбцов.(поскольку я могу ошибиться и добавить столбец или даже пропустить столбец)

<?php
$allowedColNum=5;
$batchcount=0;
$file = fopen($file_name, "r"); 
while ($line = fgetcsv($file)){
 /* I want to stop the loop if the $allowedColNum is not correct */                 
  $col = $line[0]; 
  echo $batchcount++.". ".$col."\n";
}

fclose($file);
?>

Я уверен, что это одна из тех простых и простых вещей, которые я не получаю.

Ответы [ 3 ]

14 голосов
/ 06 октября 2011

Если я понимаю, вам просто нужно count($line), потому что fgetcsv() вернул массив, представляющий одну строку из файла CSV.Поэтому массив count() - это число исходных столбцов.

while ($line = fgetcsv($file)){

  // count($line) is the number of columns
  $numcols = count($line);

  // Bail out of the loop if columns are incorrect
  if ($numcols != $allowedColNum) {
     break;
  }
  $col = $line[0]; 
  echo $batchcount++.". ".$col."\n";
}
0 голосов
/ 12 августа 2015

Ответ Михаэля Берковски отлично работает для меня, но в моем случае мне также пришлось указать разделитель csv в вызове функции fgetcsv ().Это запятая "," по умолчанию, я меняю точку с запятой ";".Например:

while ($ line = fgetcsv ($ file, 0, ';')) {

0 голосов
/ 06 октября 2011

Не проверено, но должно работать!

$allowedColNum=5;
$batchcount=0;
$file = fopen($file_name, "r"); 
$totCols=0;
while ($line = fgetcsv($file))
if(count($line) > $totCols) $totCols = count($line);
fseek($file, 0);
while ($line = fgetcsv($file))
{
  //....
}
fclose($file);

edit: проверено, работает, выполнить fseek (0) вместо сохранения значений в массиве: будет намного быстрее

...