Grâce à votre aide j'ai pu faire un code qui me permet de récupérer toutes les données dans un csv et mettre les intitulés des colonnes à la place des intitulés des lignes et vis versa afin d'en faire l'insertion en base.
Voici le code:
Code : Tout sélectionner
<h1>Gestion des compteurs d'eau</h1>
<main>
<?php
$dossier = glob('csv/*'); // ou bien 'csv/*.[cC][sS][vV]' pour aussi limiter à l'extension csv
if(!$nb_fichier = count($dossier))
echo "Il n'y a aucun fichier dans le dossier";
else
echo "Il y a <strong> $nb_fichier </strong> fichier(s) dans le dossier";
?>
</main>
<div id="rslt">
<ul>
<?php
foreach($dossier as $fichier) {
printf('<li><a href="?fichier=%s">%s</a></li>', urlencode($fichier), pathinfo($fichier, PATHINFO_FILENAME));
}
?>
</ul>
</div>
<?php
if(!empty($_GET['fichier']) && in_array($fichier=$_GET['fichier'], $dossier)) {
$tableau_gestantes = array();
?>
<div id="rslt">
<?php printf('<pre>Sélectionné: <a href="%s" target="_blank">%s</a><br>', $fichier, pathinfo($fichier, PATHINFO_FILENAME));
?>
</div>
<?php
$lignes = file($fichier);
$dates_gestantes = array_filter(str_getcsv(implode(array_slice($lignes, 3, 1)), ';')); // les dates sont à la ligne 4 donc indice 3
$type_gestantes = array_shift($dates_gestantes);
$heures_gestantes = array_slice($lignes, 4, 24);
$prototype_gestantes = array_combine(array_merge(['id', 'type', 'date'], range(23, 0)), array_fill(0, 27, 0));
$prototype_gestantes['type'] = "'$type_gestantes'";
foreach($dates_gestantes as $i => $date_gestantes) {
$tableau_gestantes[$i] = $prototype_gestantes;
$date_gestantes = implode('-', array_reverse(explode('/', $date_gestantes)));
$tableau_gestantes[$i]['date'] = "'$date_gestantes'";
}
foreach($heures_gestantes as $ligne_gestantes) {
$data_gestantes = str_getcsv($ligne_gestantes, ';');
$heure_gestantes = intval(array_shift($data_gestantes));
foreach($data_gestantes as $i => $nb_procs_gestantes) {
if(!trim($nb_procs_gestantes)) continue;
$tableau_gestantes[$i][$heure_gestantes] = intval($nb_procs_gestantes);
}
}
foreach($tableau_gestantes as $ligne_gestantes) {
$sql_gestantes[] = "\n(" . implode(', ', $ligne_gestantes) . ')';
}
?>
<div id="rslt">
<?php
$sql_gestantes = 'INSERT INTO releve VALUES </br>' . implode(',</br>', $sql_gestantes);
echo $sql_gestantes."</br>";
echo '</pre>';
?>
<div id="rslt">
<?php
}Plutôt que d'avoir les 23 colonnes des horaires il m'a été demandé de faire une seule colonne "temps" et une "valeur". Dans la "temps" je dois y mettre la concaténation de la "date" se trouvant dans le fichier csv et "l'heure" également dans ce fichier.
Pour cela je dois dans un premier temps parcourir ma variable, récupérer la date et l'heure, les convertir en champs DATE car ce sont des string et générer un champs "temps" qui serait de type timestamp.
Afin de parcourir ma variable j'ai bien essayé avec un foreach or elle n'est pas reconnu comme un array donc je ne peux pas la parcourir?
Merci pour votre aide.