J'ai un tableau multidimensionnel dans lequel certaines tableaux manquent une paire clé-valeur qui se trouve dans les autres tableaux. Lorsque je convertis en csv (dans ce cas, délimité par des tabulations), les cellules de colonne d'une ligne se décalent vers la gauche et remplacent la clé/valeur manquante. Par exemple, ce tableau:Suppression des données de colonne en désordre dans csv lorsqu'une paire valeur/clé de tableau est manquante
array
(
array("Make" => "Volvo", "Color" => "red", "Quantity" => 18),
array("Make" => "BMW", "Color" => "blue", "Quantity" => 13),
array("Make" => "Saab", "Quantity" => 11),
array("Make" => "Land Rover", "Color" => "green", "Quantity" => 15)
);
VERSION 1
Lorsque j'utilise le code suivant:
$cfilename = 'result.csv';
$data = array
(
array("Make" => "Volvo", "Color" => "red", "Quantity" => 18),
array("Make" => "BMW", "Color" => "blue", "Quantity" => 13),
array("Make" => "Saab", "Quantity" => 11),
array("Make" => "Land Rover", "Color" => "green", "Quantity" => 15)
);
//below creates csv
$fp = fopen($cfilename, 'w');
$header = false;
foreach ($data as $row)
{
fputcsv($fp, $row, chr(9));
}
fclose($fp);
return;
me donner quelque chose comme ceci:
Volvo |red | 18
BMW |blue | 13
Saab |11 |
Land Rover |green | 15
I peut obtenir les colonnes à aligner correctement si j'utilise les étiquettes de clés pour wri les en-têtes. Mais dans ce cas, au lieu que la cellule pour la paire clé/valeur manquante soit vide, le numéro de colonne est imprimé à sa place.
VERSION 2 Ce code:
$cfilename = 'result.csv';
$data = array
(
array("Make" => "Volvo", "Color" => "red", "Quantity" => 18),
array("Make" => "BMW", "Color" => "blue", "Quantity" => 13),
array("Make" => "Saab", "Quantity" => 11),
array("Make" => "Land Rover", "Color" => "green", "Quantity" => 15)
);
//below creates csv
$fp = fopen($cfilename, 'w');
$header = false;
foreach ($data as $row)
{
if (empty($header)) //creates header, chr(9) makes tab delimited
{
$header = array_keys($row);
fputcsv($fp, $header, chr(9));
$header = array_flip($header);
}
fputcsv($fp, array_merge($header, $row), chr(9)); //creates rows, chr(9) makes tab delimited
}
fclose($fp);
return;
Résultats: dans cette
Make | Color | Quantity
-----------|-------|----
Volvo |red | 18
BMW |blue | 13
Saab |1 | 11
Land Rover | green | 15
note, le "1" sous la couleur de la ligne "Saab".
Obtenir l'une ou l'autre version fonctionnerait bien, si c'est la version 1, sans les en-têtes, je peux toujours ajouter cette ligne dans le fichier de sortie délimité par des tabulations.