2011-10-06 38 views
5

Tôi đang cố gắng xác định số lượng tệp csv có trong cột.PHP fgetcsv() - tìm số cột

Đây là tập lệnh của tôi, chỉ sử dụng cột đầu tiên, nhưng tôi đang chạy hơi mù. Tôi muốn đặt một biến giới hạn số lượng cột. (vì tôi có thể mắc lỗi và thêm cột hoặc thậm chí bỏ lỡ cột)

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

Tôi chắc chắn đó là một trong những điều dễ dàng mà tôi không nhận được.

Trả lời

13

Nếu tôi hiểu, bạn chỉ cần count($line), vì fgetcsv() đã trả lại một mảng đại diện cho một hàng từ tệp CSV. Do đó, mảng count() của mảng là số cột nguồn.

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

Tôi hiểu! Tôi nghĩ rằng tôi đã nhầm lẫn bản thân mình với việc tìm kiếm $ numcols trước vs sau khi nhận được các hàng riêng lẻ. Tôi tưởng tượng đó không phải là cách nó hoạt động, vì có thể một hàng cụ thể có một số cột khác với số khác trong cùng một tệp. Nhưng tôi thành thật làm một giả định với điều đó, vì tôi mới với các tập tin. – coffeemonitor

0

Không kiểm tra, nhưng phải hoạt động!

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

chỉnh sửa: kiểm tra, làm việc làm fseek (0) thay vì lưu các giá trị trong một mảng: sẽ nhanh hơn rất nhiều

0

Michael Berkowski việc câu trả lời tốt cho tôi, nhưng trong trường hợp của tôi, tôi cũng đã phải xác định dấu phân tách csv trong hàm fgetcsv(). Đó là dấu phẩy "," theo mặc định, tôi thay đổi nó thành dấu chấm phẩy ";". Như thế này:

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

Các vấn đề liên quan