Voici la fonction que j'ai ajoutée à ma bibliothèque d'utilitaires pour une utilisation future. Je l'ai dérivée de la réponse de NSSec.
Cette solution vous permet de spécifier si vous voulez utiliser la première ligne comme clés pour le tableau. Je vais probablement ajouter la possibilité de passer un tableau à utiliser pour les clés du paramètre $first_line_keys à un moment donné.
/**
* Convertit un fichier CSV en un tableau
* REMARQUE : le fichier n'a pas besoin d'avoir l'extension .csv
*
* $file - chemin du fichier à convertir (chaîne)
* $delimiter - délimiteur de champ (chaîne)
* $first_line_keys - utiliser la première ligne comme clés du tableau (booléen)
* $line_length - définir la longueur à récupérer pour chaque ligne (entier)
*/
public static function CSVToArray($file, $delimiter = ',', $first_line_keys = true, $line_length = 2048){
// fichier inexistant
if( !file_exists($file) ){
return false;
}
// ouvrir le fichier
$fp = fopen($file, 'r');
// ajouter chaque ligne au tableau
$csv_array = array();
while( !feof($fp) ){
// obtenir la ligne actuelle
$line = fgets($fp, $line_length);
// ligne en tableau
$data = str_getcsv($line, $delimiter);
// incompatibilité du nombre de clés/données
if( isset($keys) && count($keys) != count($data) ){
// passer à la ligne suivante
continue;
// première ligne, la première ligne doit être des clés
}else if( $first_line_keys && !isset($keys) ){
// utiliser les données de la ligne comme clés
$keys = $data;
// première ligne utilisée comme clés
}else if($first_line_keys){
// ajouter en tant que tableau associatif
$csv_array[] = array_combine($keys, $data);
// première ligne non utilisée comme clés
}else{
// ajouter en tant que tableau numérique
$csv_array[] = $data;
}
}
// fermer le fichier
fclose($fp);
// rien trouvé
if(!$csv_array){
return array();
}
// retourner le tableau CSV
return $csv_array;
} // CSVToArray()