2016-06-17 4 views
5

У меня есть. CSV-файл. Некоторые поля пусты, а некоторые поля имеют запятые или точки.Показать файл csv в массиве

Теперь, как я мог отображать его так, как в массиве?

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 .....) 

В настоящее время я могу только показать это так:

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) .... 

И я использую этот код:

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

Я предпочитаю использовать встроенные функции CSV.

+0

@ Annant Я буду usi ng a foreach loop для сравнения всех данных в массиве. –

+0

@Anant, Да, я хотел бы использовать 'fgetcsv' или что-то вроде этого, некоторые из моих полей пустые и имеют запятые. –

+0

@Anant, Да, он многомерный. –

ответ

2

Если это ваш ожидаемый вывод сверху, вы можете просто использовать метод file() для синтаксического анализа файла в массив.

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

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

Спасибо за это, Как насчет того, есть ли у меня пустые поля и запятые? –

+0

Вы хотите их снять? Нам действительно нужно видеть ваш фактический ожидаемый результат. Поскольку ваш ожидаемый вывод на самом деле имел пустые поля. – Farkie

+0

Я пробовал это до 'file', но некоторые из строк из моего csv-файла не отображаются в массиве. –

0

Файлы csv считываются путем разделения каждого значения запятой. если вы стоите, содержит саму кому, тогда она рассматривается как несколько значений пример , если у вас есть значение B, C и значение A , если вы пишете css как B, C, A, тогда он рассматривает себя как BC и A избегайте такой проблемы. использовать корпус, такие как кавычки или двойные кавычки "B, C", "A"

+0

Вы правы, но как? Любой образец ссылки? –

1

fgetcsv() может решить вашу проблему ..

fgetcsv() функция разбирает строку из открытого файла, проверка полей CSV.

  • функция

    fgetcsv() останавливает возвращение на новой линии, на заданной длины , или EOF, что наступит первым.

  • Эта функция возвращает поля CSV в массиве при успешном завершении или FALSE при сбое и EOF.

Синтаксис

fgetcsv (файл, длина, сепаратор, корпус)

  • файл Обязательный. Задает файл для проверки.
  • длина: Указывает максимальную длину линии. Должно быть больше, чем самая длинная строка (в символах) в CSV-файле. Опуская этот параметр (или установив его на 0) длина линии не ограничена, что немного медленнее.

Пример:

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

CSV-файл:

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

Выход кода выше:

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

Визит http://php.net/manual/en/function.fgetcsv.php для получения дополнительной справки.

1

После этого примера: 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); 
} 

Но вместо печати implode(', ', $filteredData), вы должны удалить array_filter() и печать implode('</span><span class="comma">', $data) со следующими CSS:

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

Новый 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>'; 
} 
Смежные вопросы