---
title: "Parse'a CSV fil med PHP"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/170251-parse-a-csv-fil-med-php"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "MickeA.com"
published: "2008-03-26T16:28:57.000Z"
updated: "2008-03-26T17:50:33.000Z"
replies: 3
views: 534
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/170251-parse-a-csv-fil-med-php"
---

# Parse'a CSV fil med PHP

## #1 — MickeA.com, 2008-03-26T16:28Z

Hej,
Jag har en csv fil som är semikolon separerad med x antal rader och 4 kolumner.

Sprang på det här skriptet på nätet:

```php
[<?
function csv_explode($str, $delim = ',', $qual = "\"") {
  $len = strlen($str);
  $inside = false;
  $word = '';
  for ($i = 0; $i < $len; ++$i) {
    if ($str[$i]==$delim && !$inside) {
      $out[] = $word;
      $word = '';
    } else if ($inside && $str[$i]==$qual && ($i<$len && $str[$i+1]==$qual)) {
      $word .= $qual;
      ++$i;
    } else if ($str[$i] == $qual) {
      $inside = !$inside;
    } else {
      $word .= $str[$i];
    }
  }
  $out[] = $word;
  return $out;
}
```

Nu vill jag läsa in min csv fil och sen skriva ut resultatet som en HTML tabell.

Såhär har jag testat:

```php
$template = "./data.csv";
$fp = fopen($template, "r");
$data = fread($fp, filesize($template));
fclose($fp);

$res = csv_explode($data, $delim = ";", $qual = "\"");

for($i = 0; $i <= sizeof($res); $i++){
	echo $res[$i] . " " . (($i % 4 == 0) ? "<br />" : "");
}
```

Tanken är att till en början skriva ut resultatet såhär:

```
ID1   KOL1_1  KOL1_2   KOL1_3
ID2   KOL2_1   KOL2_2   KOL2_3
....
```

Men skriver jag ut arrayen som den här funktionen ovan skapar, blir det:

```
Array
(
    [0] => NAMN1
    [1] => 90
    [2] => 20
    [3] => 110
NAMN2
    [4] => 20
    [5] => 80
    [6] => 100
NAMN3
    [7] => 60
    [8] => 30
    [9] => 90
)
```

"Namn2", "Namn2" osv. verkar hamna utanför min array, eller vad är det som händer?

Jag skulle vilja att array'en såg ut såhär:

```
Array
(
    [0] => NAMN1
    [1] => 90
    [2] => 20
    [3] => 110
    [4] => NAMN2
    [5] => 20
    [6] => 80
    [7] => 100
    [8] => NAMN3
    [9] => 60
    [10] => 30
    [11] => 90
)
```

Hur skriver man om funktionen ovan för att uppnå detta?

Tack!

Permalänk: https://www.webforum.nu/p/170251

## #2 — MickeA.com, 2008-03-26T16:41Z

Googlade lite mer och hittade den här:
<http://www.phpclasses.org/browse/package/2331.html>

Permalänk: https://www.webforum.nu/p/2093859

## #3 — Matti, 2008-03-26T17:23Z

Annars så fungerar funktionen ovan bra om man läser in och "explodar" csv-filen rad för rad. 

```php
$template = "./data.csv"; 
$data = file($template);
$rows = count($data);

for ($i=0; $i < $rows; $i++) {
$currentRow = csv_explode($data[$i],';');
	foreach ($currentRow as $value) {
		$allValues[] = $value;
	}
}
print_r($allValues);
```

*data.csv*

```
"NAMN1";"25";"25";"50"
"NAMN2";"30";"30";"30"
"NAMN3";"54";"12";"33"
```

ger:

```
Array
(
    [0] => NAMN1
    [1] => 25
    [2] => 25
    [3] => 50

    [4] => NAMN2
    [5] => 30
    [6] => 30
    [7] => 30

    [8] => NAMN3
    [9] => 54
    [10] => 12
    [11] => 33
)
```

Permalänk: https://www.webforum.nu/p/2093867

## #4 — MickeA.com, 2008-03-26T17:50Z

Aha, såpass.

Tack!

Permalänk: https://www.webforum.nu/p/2093875

---

Tråden på webben: https://www.webforum.nu/amne/php/170251-parse-a-csv-fil-med-php
