まず、私はフランス語なので、私の英語をお願いします! 解決できない問題があります。私は複数のCSVファイルをドラッグ&ドロップできるウェブサイトを持っていますが、一度に1つのファイルだけを処理します。それは1つのファイルと完全に動作し、ファイル内のデータを読み取り、ハイチャートグラフを表示します。私は、同じように書かれた複数のCSVファイルから来たいくつかのグラフを表示したいと思います。私は一度に複数のファイルをアップロードすることができ、ドラッグ&ドロップを行うために管理し、私はこれを取得besauceそれは動作します:一方アップロードされた複数のCSVファイルを読むPHP
Array ([name] => Array ([0] => 14-04-2014 (1).csv [1] => 14-04-2014.csv) [type] => Array ([0] => text/csv [1] => text/csv) [tmp_name] => Array ([0] => /tmp/phpbQZ7NI [1] => /tmp/phptvEwXI) [error] => Array ([0] => 0 [1] => 0) [size] => Array ([0] => 589 [1] => 589))
を、私は中にこれらのファイルを処理するために管理することはできませんループ。ここで
はループせずに、一つのファイルのコードです:私の試みのすべてにもかかわらずif (($fichier = fopen("upload/".$_FILES['file']['name'], "r")) !== FALSE) {
$oui_total = 0;
$non_total = 0;
$tab_oui = array();
$tab_non = array();
$tab_sat = array();
$tableau = array();
$date = null;
$id_borne= null;
while (($data = fgetcsv($fichier,0, ",")) !== FALSE) { //on lit ligne par ligne dans cette boucle !
//on lit l'ID de la borne s'il existe
if ((mb_strimwidth($data[0], 0, 4,'') != "2014")
AND (mb_strimwidth($data[0], 0, 4,'') != "2015")
AND (mb_strimwidth($data[0], 0, 4,'') != "2016")
AND (mb_strimwidth($data[0], 0, 4,'') != "2017")
AND (mb_strimwidth($data[0], 0, 4,'') != "2018")
AND (mb_strimwidth($data[0], 0, 4,'') != "2019"))
{
$id_borne=$data[0];
}
elseif ($date === null) {
$date = mb_strimwidth($data[0], 0, 10,'');
}
// sauter les lignes vides
if ($data[0] === null) {
continue;
}
// pour écrire le sous-titre du graphe
if (strlen($data[O]) > 5 && $date === null)
// parser l'heure et la date
$data[0] = trim($data[0]);
$format_date = preg_match(
'~
(?P<year> \d+) -
(?P<month> \d+) -
(?P<day> \d+) \h+
(?P<hour> \d+) :
(?P<minute> \d+) :
(?P<second> \d+)
~x',
$data[0],
$match
);
//if ($format_date == false) {
// exit("Le fichier csv n'a pas le format attendu: la date devrait être \"yyyy-mm-dd hh:mm:ss\".");
//}
// Par défaut : heure d'hiver. Donc on a les bons horaires du 25 oct au 29 mars.
// ete : 29 mars et +
// hiver : 25 octobre et +
// '$ete' vaut 'true' si la date du CSV est en été
$ete = ((intval($match['month']) > 3 && intval($match['month']) < 10)
|| (intval($match['month']) === 3 && intval($match['day']) > 28)
|| (intval($match['month']) === 10 && intval($match['day']) < 25));
$correctif_heure = $ete === true ? 1 : 0;
// on stocke l'information dans un tableau avec l'heure en minutes pour clef (exemple: 8*60+15=495 pour 8h15)
$heure_en_minute = (intval($match['hour']) + $correctif_heure) * 60 + intval($match['minute']);
$tableau[$heure_en_minute] = array(
'oui' => intval($data[1]),
'non' => intval($data[2]),
'sat' => ceil($data[1]/($data[1] + $data[2]) * 100)
);
$oui_total += $data[1];
$non_total += $data[2];
}
fclose($fichier);
}
else {
exit(TXT_IMPOSSIBLE);
}
unlink($dossier . $_FILES['file']['name']);
$total = $oui_total + $non_total;
$sat_total = ceil($oui_total/$total * 100);
$unsat_total = 100 - $sat_total;
、私はそれが一度に複数のファイルを読むためには、このコードを「変換」するために管理することができます。 ご協力いただければ幸いです! ありがとう
そのためにforeachループを使用できます –
@AdhanTimothyYounesはい、試しましたが、うまくいかなかったはずです。データを表に「変換」する方法がわかりません。私は何をしたのですか? – CamilleKah