str getcsv dans un tableau multidimensionnel en php [fermé]
j'ai des valeurs csv comme ceci:
$csv_data = "test,this,thing
hi,there,this
is,cool,dude
have,fun";
je veux prendre toute une chaîne CSV et la lire dans un tableau multidimensionnel pour obtenir:
array(
array(
'test' => 'hi',
'this' => 'there',
'thing' => 'this'
),
array(
'test' => 'is',
'this' => 'cool',
'thing' => 'dude'
),
array(
'test' => 'have',
'this' => 'fun',
'thing' => ''
)
);
je veux une sortie comme ça, notez que la valeur CSV est dynamique.
19
demandé sur
hakre
2011-12-02 11:45:16
3 réponses
en supposant que chaque ligne dans les données CSV a le même nombre de colonnes, cela devrait fonctionner.
$lines = explode("\n", $csv_data);
$head = str_getcsv(array_shift($lines));
$array = array();
foreach ($lines as $line) {
$array[] = array_combine($head, str_getcsv($line));
}
si les lignes ont un nombre variable de colonnes (comme dans votre exemple, où la dernière ligne a 2 colonnes au lieu de 3), Utilisez cette boucle à la place:
foreach ($lines as $line) {
$row = array_pad(str_getcsv($line), count($head), '');
$array[] = array_combine($head, $row);
}
35
répondu
Wiseguy
2011-12-02 08:29:25
Voici une solution complète:
$lines = explode("\n", $csv_data);
$formatting = explode(",", $lines[0]);
unset($lines[0]);
$results = array();
foreach ( $lines as $line ) {
$parsedLine = str_getcsv( $line, ',' );
$result = array();
foreach ( $formatting as $index => $caption ) {
if(isset($parsedLine[$index])) {
$result[$formatting[$index]] = trim($parsedLine[$index]);
} else {
$result[$formatting[$index]] = '';
}
}
$results[] = $result;
}
Alors, que faisons-nous ici?
- tout d'abord, vos données CSV sont divisées en tableau de lignes avec
explode
- puisque la première ligne de votre CSV décrit le format des données, elle doit être séparée des lignes de données réelles (
explode
etunset
) - Pour stocker les résultats, nous initialiser un tableau (
$results
) - Foreach est utilisé pour itérer à travers la ligne de données par ligne. Pour chaque ligne:
- la Ligne est analysé avec PHP
str_getcsv
- un tableau de résultats vide est initialisé
- chaque ligne est inspectée en fonction du format. Des cellules sont ajoutées et les colonnes manquantes sont garnies de chaînes vides.
- la Ligne est analysé avec PHP
4
répondu
jsalonen
2013-07-10 02:19:00
Voici une solution très propre et simple:
function parse_row($row) {
return array_map('trim', explode(',', $row));
}
$rows = str_getcsv($csv_data, "\n");
$keys = parse_row(array_shift($rows));
$result = array();
foreach ($rows as $row) {
$row = parse_row($row);
$row = array_pad($row, 3, NULL);
$result[] = array_combine($keys, $row);
}
2
répondu
ioseb
2011-12-02 08:11:19