2011-10-06 14 views
5

Próbuję określić, ile kolumn ma plik csv.PHP fgetcsv() - znajdź liczbę kolumn

Oto mój skrypt, który wykorzystuje tylko pierwszą kolumnę, ale trochę słabo. Chcę umieścić zmienną, która ogranicza liczbę kolumn. (Ponieważ może się pomylę i dodać kolumny, a nawet pominąć kolumnę)

<?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); 
?> 

Jestem pewien, że to jedna z tych prostych rzeczy łatwych, że nie dostaję.

Odpowiedz

13

Jeśli rozumiem, po prostu potrzebujesz count($line), ponieważ fgetcsv() zwrócił tablicę reprezentującą jeden wiersz z pliku CSV. Tablica count() jest zatem liczbą kolumn źródłowych.

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

widzę! Myślę, że myliłem się ze znalezieniem $ numcols przed lub po uzyskaniu poszczególnych wierszy. Wyobrażam sobie, że tak nie jest, ponieważ może określony wiersz ma inny numer kolumny niż inne w tym samym pliku. Ale szczerze się z tym zakładam, ponieważ jestem nowy z plikami. – coffeemonitor

0

Nie testowane, ale powinno działać!

$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: testowany, pracując zrobić fseek (0) zamiast zapisywać wartości w tablicy: będzie dużo szybciej

0

Michael Berkowski praca odpowiedź w porządku dla mnie, ale w moim przypadku, również musiał określić separator csv w wywołaniu funkcji fgetcsv(). To przecinek "," domyślnie zmieniam go na średnik ";". Tak:

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

Powiązane problemy