Как использовать PHP fgetcsv для создания массива для каждого фрагмента данных в CSV-файле? - PullRequest
1 голос
/ 11 мая 2010

Я пытаюсь импортировать данные из CSV-файла в некоторый HTML-код, чтобы использовать его в графике, который я уже кодировал. Я пытаюсь использовать PHP и fgetcsv для создания массивов для каждого отдельного фрагмента данных, чтобы использовать PHP для помещения его в HTML-код. Я знаю, как открыть файл CSV и распечатать его с помощью PHP, и как печатать каждую отдельную строку, но не каждый фрагмент данных, разделенных запятой. Есть ли способ сделать это?

Если это поможет, это данные CSV, которые я пытаюсь импортировать.

May 10,72,12,60
May 11,86,24,62
May 12,67,32,34
May 13,87,12,75
May 14,112,23,89
May 17,69,21,48
May 18,98,14,84
May 19,115,18,97
May 20,101,13,88
May 21,107,32,75

Надеюсь, это имеет смысл.


Я пытаюсь получить значения в следующем HTML-коде:

<dd class="pVALUE3"><span><b>VALUE3</b></span></dd>
<dd class="sub pVALUE2" ><span><b>VALUE2</b></span></dd>

пока мой код PHP:

    <?PHP 
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $date[$c] = $data[0]
        echo "<dd class=\"p" . $data[2] . echo "\"><span><b>" . $data[2] . echo "</b></span></dd>
        <dd class=\"sub p" . $data[3] .  echo "\" ><span><b>" . $data[3] . echo "</b></span></dd>"
        }
                    ?>

Но возвращается, что есть неожиданное T_ECHO ...

Ответы [ 3 ]

2 голосов
/ 12 мая 2010

Мне удалось решить эту проблему с помощью следующего кода:

 <?PHP
/* Open CSV file */

$handle = fopen("defects.csv", "r");
$c = 0;
/* gets data from csv file */
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
/* stores dates as variable $date */
        $date[$c] = $data[0];
        $c++;
        /* inserts defect data into html code */
        echo "<div class=\"bar\"><dd class=\"p" . $data[2] . "\"><span><b>" . $data[2] . "</b></span></dd></div>";
        echo "<div class=\"subbar\"<dd class=\"sub p" . $data[3] . "\" ><span><b>" . $data[3] . "</b></span></dd></div>";
}

echo "</dl>";
echo "<ul class=\"xAxis\">";
/* X AXIS */
/* inserts date data into html code for x axis */
for ($d=0; $d < $c; $d++) {
    echo "<li>" . $date[$d] . "</li>";
}
?>
1 голос
/ 11 мая 2010

Я так понимаю, у вас так далеко?

while (($row = fgetcsv($handle, null, ",", '"')) !== false) {
        print_r($row);

После этого вы можете

foreach($row as $field){
   ...

нет

Для данных импорта вы должны были:

preg_match('/^(\w+) (\d+)$/i', $row[0], $bits);
$month = $bits[1];
$row[0] = $bits[2];

Чтобы получить название месяца.

Как прокомментировал thetaiko, вставьте свой код, и, возможно, есть ошибка для сжатия.

0 голосов
/ 11 мая 2010

Полагаю, вы хотите, чтобы каждый элемент в строке представлял собой отдельный фрагмент данных, верно? Итак, «10 мая», «72», «12» и т. Д. - все это отдельно?

Используя fgetcsv, вы сможете сделать это:

while (($data = fgetcsv('file.csv')) !== FALSE)
{
    foreach ($data as $element)
    {
        echo $element.' ';
    }
    echo '<br />';
}

Каждый раз, когда fgetcsv читает строку (до тех пор, пока не будет возвращено FALSE, обозначающее конец файла), вы можете перебирать массив $ data (при условии, что это допустимый массив, возможно, захотите проверить это ...), каждый элемент $ теперь один элемент данных, который был между запятыми.

...