2013-08-16 3 views
2

У меня есть файл PHP, который извлекает информацию из CSV-файла и успешно превращает его в таблицу, в которой отображаются только определенные строки и столбцы.Цитаты в CSV-файле, отображаемые в php-файле вместо поля обнуления

Однако CSV-файл имеет записи в нем, в которых есть запятая и пробел, завернутые в кавычки. Мой PHP-файл разбивает эти записи на две части из-за запятой и показывает кавычки вместо использования меток кавычек, чтобы указать, что это поле, которое содержит запятую и пробел.

Например, файл CSV выглядит следующим образом:

AA,BB,"Surname, Initial",CC,DD,EE 

«Фамилия и Initial» должен быть в том же поле в результирующей таблице, но вместо этого два поля создаются.

Я действительно хотел бы решить эту проблему в PHP-коде, а не заниматься самим файлом CSV. Код здесь:

echo "<meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"/> 
     <link rel=\"stylesheet\" type=\"text/css\" href=\"test.css\">"; 
$file = 'CSV/test.csv'; 
$lines = file($file); 
if (file_exists($file)){ 
    //echo "$file exists<br/>"; 

echo '<table>';      //create the html table 
$x=2;  //define the first line to display 
$y=20;  //define the last line to display 
$line_counter=0; 
foreach ($lines as $line) {   //loop to fill your table with csv data 
    if($x<=$line_counter && $line_counter<=$y) 
    { 
    $expl = explode(",", $line);  //explode each line on "," to create the rows 
    echo "<tr>";      //create each line of your table 
    $c=0; 
    while ($c<=47) {     //loop to extract columns 2 to 47 
     if(($c % 2) == 1){    //odd rows 
     echo "<td class=\"odd\">".$expl[$c]."</td>"; 
     } 
     elseif(($c == 0)){ 
     echo "<td class=\"even\">".$expl[$c]."</td>"; 
     } 
     else{ 
     echo "<td class=\"even\">".$expl[$c]."</td>"; //even rows 
     } 
     $c++; 
    } 
    echo "</tr>"; 
    $x++; 
    } 
    $line_counter++; 
} 
echo "</table>"; 
} 
+1

Почему вы не использовать встроенную функцию [fgetcsv()] (http://www.php.net/manual/en/function.fgetcsv.php) для обработки чтения файла .... он написан специально для этой цели и будет обрабатывать кавычки для вас, и ваша проблема будет волшебным образом исчезнуть. –

ответ

1

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

http://www.php.net/manual/en/function.fgetcsv.php

+0

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