2016-06-17 13 views
5

Tôi có tệp .csv. Một số trường trống và một số trường có dấu phẩy hoặc dấu chấm.Hiển thị tệp csv trong mảng

Bây giờ làm cách nào tôi có thể hiển thị nó như thế này trong mảng?

Array (

[0] => Name1,[email protected],13,56475,,190000,,,remit,5-Mar-15,26250 

[1] => Name2,[email protected],11,11250,,22500,,,the bank,30-Apr-15,6250 

[2] => Name3,[email protected],15,,,1500,receipt,,the market,7-Mar-15,1750 

[3] =>Name4,[email protected],21,25500,,46750,receipt,,bank ,7-Mar-15,21350 .....) 

Tính đến bây giờ tôi chỉ có thể hiển thị nó như thế này:

Array (

[0] => Name1 
[1] => [email protected] 
[2] => 13 
[3] => 56475 
[4] => 
[5] => 19000 
[6] => 
[7] => 
[8] => remit 
[9] => 5-Mar-15 
[10] => 26250) 


Array (
[0] => Name2 
[1] => [email protected] 
[2] => 11 
[3] => 11250 
[4] => 
[5] => 22500 
[6] => 
[7] => 
[8] => the bank 
[9] => 30-Apr-15 
[10] => 6250) .... 

Và tôi đang sử dụng mã này:

$file = fopen("pay.csv","r"); 
while(! feof($file)) 
{ 
echo '<pre>',print_r(fgetcsv($file)),'</pre>'; 
} 
fclose($file); 

Tôi thích sử dụng các chức năng csv bản địa.

+0

@Anant Tôi sẽ là người dùng ng một vòng lặp foreach để so sánh tất cả dữ liệu trong mảng. –

+0

@Anant, Có, tôi muốn sử dụng 'fgetcsv' hoặc thứ gì đó giống như coz một số trường của tôi trống và có dấu phẩy. –

+0

@Anant, Có nó là đa chiều. –

Trả lời

2

Nếu đó là kết quả mong đợi của bạn ở trên cùng, bạn có thể chỉ cần sử dụng phương thức file() để phân tích tệp thành một mảng.

$lines = file('file.csv'); 

foreach ($lines as $line_num => $line) { 
echo $line . '<br />'; 
} 
+0

Cảm ơn vì điều này, Nếu tôi có các trường trống và dấu phẩy thì sao? –

+0

Bạn muốn xóa chúng? Chúng tôi cần xem sản lượng dự kiến ​​thực sự của bạn thực sự .. như đầu ra dự kiến ​​của bạn thực sự có các trường trống .. – Farkie

+0

Tôi đã thử trước 'tệp' nhưng một số hàng từ tệp csv của tôi không hiển thị trong mảng. –

0

tệp csv được đọc bằng cách tách từng giá trị bằng dấu phẩy. nếu giá trị của bạn chứa chính bản thân hôn mê thì nó được coi là nhiều giá trị ví dụ nếu bạn có giá trị B, C và giá trị A nếu bạn viết css là B, C, A rồi xử lý như BC và A tránh vấn đề như vậy. sử dụng bao vây như dấu ngoặc kép hoặc dấu ngoặc kép "B, C", "A"

+0

Bạn đúng, nhưng làm thế nào? Bất kỳ tài liệu tham khảo mẫu? –

1

fgetcsv() có thể giải quyết vấn đề của bạn ..

Các fgetcsv() chức năng phân tích một dòng từ một tập tin mở, kiểm tra các trường CSV.

  • Các fgetcsv() chức năng ngừng trở về trên một dòng mới, đồng thời quy định , hoặc ít EOF, nào đến trước.

  • Hàm này trả về các trường CSV trong một mảng thành công hoặc FALSE về lỗi và EOF.

Cú pháp

fgetcsv (tập tin, chiều dài, tách, bao vây)

  • tập tin buộc. Chỉ định tệp cần kiểm tra.
  • chiều dài: Chỉ định độ dài tối đa của một dòng. Phải lớn hơn dòng dài nhất (trong ký tự) trong tệp CSV. Bỏ qua tham số này (hoặc đặt nó thành 0) chiều dài dòng không bị giới hạn, trong đó hơi chậm.

Ví dụ:

<?php 
$file = fopen("contacts.csv","r"); 
print_r(fgetcsv($file)); 
fclose($file); 
?> 

Các tập tin CSV:

Kai Jim, Refsnes, Stavanger, Norway 
Hege, Refsnes, Stavanger, Norway 

Sản lượng của các mã trên sẽ là:

Array 
(
[0] => Kai Jim 
[1] => Refsnes 
[2] => Stavanger 
[3] => Norway 
) 

Thăm http://php.net/manual/en/function.fgetcsv.php để tham khảo hơn.

1

Tiếp theo ví dụ này: http://php.net/manual/en/function.fgetcsv.php#example-2613

if (($handle = fopen("test.csv", "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     $filteredData = array_filter($data, function($item) { 
      return '' !=== $item; 
     }); 
     echo implode(', ', $filteredData), PHP_EOL; 
    } 
    fclose($handle); 
} 

Nhưng thay vì in implode(', ', $filteredData), bạn nên loại bỏ array_filter() và in implode('</span><span class="comma">', $data) với CSS sau đây: Mã

.comma { 
    background-color: red; 
    padding: 2px 5px; 
} 
.comma:empty { 
    display: none; 
} 
.comma + .comma { 
    margin-left: 20px; 
} 

New PHP:

if (($handle = fopen("test.csv", "r")) !== FALSE) { 
    echo '<div class="csv">'; 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     echo '<div><span class="comma">'; 
     echo implode('</span>, <span class="comma">', $data), PHP_EOL; 
     echo '</span></div>'; 
    } 
    fclose($handle); 
    echo '</div>'; 
} 
Các vấn đề liên quan