чтение и форматирование CSV-данных с использованием Explode и массивов в PHP - PullRequest
0 голосов
/ 23 октября 2009

Цель

Чтобы прочитать файл csv и разделить каждую строку в массив. Первая строка (имена полей) отображается один раз, а затем перебирает оставшиеся данные.

У меня есть эта функция, чтобы открывать и взрывать CSV-файл

$myFile = "csv.csv";
$fh = fopen($myFile, 'r');
$theData = fread($fh, filesize($myFile));
fclose($fh);
$csv = explode(",", $theData);

Это CSV-файл, о котором идет речь

id,sub,type,regprice,natprice
1,4,Team,40,75
2,4,Individual,15,35
3,4,Stunt Group,50,150
4,4,Coed Partner Stunt,50,150

Что мне нужно знать, это как загрузить первую строку в массив отдельно, а затем перебрать оставшиеся массивы следующим образом.

Array[0][0] - Array[0][1] - Array[0][2] - Array[0][3] - Array[0][4]
-------------------------------------------------------------------
Array[1][0] - Array[1][1] - Array[1][2] - Array[1][3] - Array[1][4]
Array[2][0] - Array[2][1] - Array[2][2] - Array[2][3] - Array[2][4]
Array[3][0] - Array[3][1] - Array[3][2] - Array[3][3] - Array[3][4]
Array[4][0] - Array[4][1] - Array[4][2] - Array[4][3] - Array[4][4]

Ответы [ 5 ]

6 голосов
/ 23 октября 2009

fgetcsv(), вероятно, сделает все это для вас.

2 голосов
/ 23 октября 2009

Попробуйте это:

foreach ($csv as $i=>$row) {
  $rowStr = implode(' - ',$row)."\n";
  print($rowStr);
  if ($i == 0) {
    print(str_repeat('-',strlen($rowStr))."\n");
  }
}

Редактировать: исправлена ​​синтаксическая ошибка.

1 голос
/ 23 октября 2009
<?php
$myFile = "csv.csv";
$fh = fopen($myFile, 'r');
$headers = fgetcsv($fh);
$data = array();
while (! feof($fh))
{
    $row = fgetcsv($fh);
    if (!empty($row))
    {
        $obj = new stdClass;
        foreach ($row as $i => $value)
        {
            $key = $headers[$i];
            $obj->$key = $value;
        }
        $data[] = $obj;
    }
}
fclose($fh);
print_r($data);
?>

Будет выведено:

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [sub] => 4
            [type] => Team
            [regprice] => 40
            [natprice] => 75
        )

    [1] => stdClass Object
        (
            [id] => 2
            [sub] => 4
            [type] => Individual
            [regprice] => 15
            [natprice] => 35
        )

    [2] => stdClass Object
        (
            [id] => 3
            [sub] => 4
            [type] => Stunt Group
            [regprice] => 50
            [natprice] => 150
        )

    [3] => stdClass Object
        (
            [id] => 4
            [sub] => 4
            [type] => Coed Partner Stunt
            [regprice] => 50
            [natprice] => 150
        )

)
0 голосов
/ 24 октября 2009
$file_array=file('csv.csv');
$lines=count($file_array);

$first_line=explode(',',$file_array[0]);
$fl_text=implode(' - ',$first_line);    
echo $fl_text.'<br>';

for($i=1;$i<$lines;$i++)
   {
   $line_text=str_replace(',',' - ',$file_array[$i]);
   echo '<span style="color:#ff0000;">'.$line_text.'</span><br>';
   }

Это включает в себя несколько способов распечатать строки без необходимости взрывать каждый из них. Вы можете заменить ',' пробелом, используя str_replace, или вы можете взорваться и затем взорваться Вероятно, str_replace более эффективен.

Кроме того, команда file () считывает каждую строку файла в значения в массиве.

0 голосов
/ 23 октября 2009

Я нашел это на работу

Я добавил / в конце строки CSV.

$myFile = "csv.csv";
$fh = fopen($myFile, 'r');
$theData = fread($fh, filesize($myFile));
fclose($fh);
$csvpre = explode("/", $theData);
$i = 1;
    foreach ( $csvpre AS $key => $value){
        $info = explode(",", $value);    
            if($i == "1"){
                echo "$info[0] - $info[1] - $info[2] - $info[3] - $info[4]<br>";
                $i++;
                } else {
                echo "<span style=\"color:#ff0000;\">$info[0] - $info[1] - $info[2] - $info[3] - $info[4]</span><br>";
            }       
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...