2009-10-23 4 views
0

L'objectiflecture et la mise en forme des données à l'aide csv et tableaux dans exploser php

Pour lire le fichier csv, et séparer chaque ligne dans un tableau. La première ligne (noms de champs) s'affiche une fois, puis parcourt les données restantes.

J'ai cette fonction pour ouvrir et exploser le fichier csv

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

Ceci est le fichier CSV en question

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 

Ce que je dois savoir comment faire, est de charger la première ligne dans un tableau séparément, puis bouclez les tableaux restants de la manière suivante.

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] 

Répondre

0

Je trouve que cela fonctionne

J'ai ajouté un/à la fin des lignes 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>"; 
      }  
    } 
6

fgetcsv() fera probablement tout cela pour vous.

+0

Et fichier() aidera également. –

+1

@eyze fgetcsv() prend un descripteur de ressource de fopen(). file() est une alternative solide si vous avez VRAIMENT besoin d'exploser les colonnes csv vous-même car cela retournera une chaîne de caractères représentant chaque ligne. –

+2

vous pouvez mélanger file() avec str_getcsv() :) –

2

Essayez ceci:

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

Edit: erreur de syntaxe fixe.

1
<?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); 
?> 

Affichera:

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
$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>'; 
    } 

Cela inclut deux façons d'imprimer les lignes sans avoir besoin d'exploser chacun. Vous pouvez remplacer le ',' par un espace en utilisant str_replace, ou vous pouvez exploser puis imploser. Str_replace est probablement plus efficace.

De plus, la commande file() lit chaque ligne d'un fichier en valeurs dans un tableau.

Questions connexes