J'ai besoin d'aide PHP à ouvrir un fichier CSV dans un tableau, à modifier les données, puis à écraser le fichier CSV d'origine avec les données modifiées

StackOverflow https://stackoverflow.com/questions/6372163

  •  28-10-2019
  •  | 
  •  

Question

J'ai besoin de retirer les données d'un fichier CSV à utiliser dans les rapports. Cependant, le logiciel d'exportation n'a pas la capacité de l'exporter dans un format utile. En utilisant PHP, je voudrais prendre un fichier CSV avec des données comme:

'Time','Month And Year','Count'
'8 Hours','Apr 2011','127'
'6 Hours','Apr 2011','45'
'4 Hours','Apr 2011','23'
'2 Hours','Apr 2011','122'
'8 Hours','Dec 2010','29'
'6 Hours','Dec 2010','8'
'4 Hours','Dec 2010','1'
'2 Hours','Dec 2010','64'
etc...

Et transformez-le en ceci:

Time,Dec 2010,Jan 2011,Feb 2011,Mar 2011,Apr 2011,May 2011
8 Hours,126,47,115,77,127,110
6 Hours,45,18,62,38,42,31
4 Hours,23,3,11,8,15,18
2 Hours,122,93,185,144,128,70

Pour le moment, j'ai le code pour ouvrir le fichier CSV à l'aide de FGETCSV () et supprimer les caractères indésirables:

$lines = array();
$tempName = array();
$tempCount = array();
$tempTitle = array();
$items = array();

$fp = fopen('../data/data2.csv','r') or die("can't open data2.csv");

while($lines = fgetcsv($fp,4096,"\\n")) {

  for ($i = 0, $j = count($lines); $i < $j; $i++) {

    $lines[$i] = str_replace('\'', '', $lines[$i]);
    $lines[$i] = str_replace('A: ', '', $lines[$i]);
    $lines[$i] = str_replace('B: ', '', $lines[$i]);
    $lines[$i] = str_replace('C: ', '', $lines[$i]);
    $lines[$i] = str_replace('D: ', '', $lines[$i]);

  }
}

fclose($fp) or die("can't close volume2.csv");

Cela stocke les lignes du fichier CSV en lignes délimitées par virgules, ce qui fait ressembler le tableau des lignes $:

Time,Month And Year,Count
8 Hours,Apr 2011,127
6 Hours,Apr 2011,45
4 Hours,Apr 2011,23
2 Hours,Apr 2011,122
8 Hours,Dec 2010,29
6 Hours,Dec 2010,8
4 Hours,Dec 2010,1
2 Hours,Dec 2010,64
etc...

Maintenant, ce que je dois faire, c'est stocker les données dans l'ordre correct à l'intérieur d'un ou plusieurs tableaux afin de pouvoir l'exporter dans le fichier CSV.

J'ai essayé d'utiliser:

for ($h = 0, $k = count($lines); $h < $k; $h++) {
  $items = preg_split("/[,]+/",$lines[$h]);
}

Et puis placer les données correctes dans les tableaux à l'aide d'une instruction de cas, mais elle raccroche, donc je dois faire quelque chose de mal. (Sans parler de ce code n'est pas optimisé.)

Des idées sur où je peux aller d'ici? Merci!

Était-ce utile?

La solution

Vous utilisez fgetcsv() Dans le mauvais sens et le faire lire en plusieurs lignes à la fois.

Modifiez votre code à utiliser:

while($line = fgetcsv($fp)) {

}

et dans chaque rangée d'itération d'une ligne à la fois.

Si vous souhaitez réécrire ceci dans un fichier CSV, vous pouvez faire quelque chose comme:

$out = array();
while($line = fgetcsv($fp)) {
    // modify fields as you need to
    $out[] = implode(",", $line);
}

// now you can write implode("\n", $out) out as the modified data
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top