Modifier un tableau multidimensionnel en PHP
Posté : 13 déc. 2015, 18:27
Bonsoir,
Cherchant à produire un comparateur de tableaux, j'ai plus ou moins réussi à mettre en place le système suivant :
Des données sont comprises dans un fichier csv (soit Pronoteentier), et d'autres moins récentes, dans un deuxième (soit Pronotetest). La comparaison permet de créer un fichier généré dans lequel, à chaque ligne où un élément différent est trouvé, il est placé à sa ligne respective dans un nouveau tableau. Cependant.. Les autres champs n'apparaissent pas !
Un petit coup de main s'il vous plaît ?
Cherchant à produire un comparateur de tableaux, j'ai plus ou moins réussi à mettre en place le système suivant :
Des données sont comprises dans un fichier csv (soit Pronoteentier), et d'autres moins récentes, dans un deuxième (soit Pronotetest). La comparaison permet de créer un fichier généré dans lequel, à chaque ligne où un élément différent est trouvé, il est placé à sa ligne respective dans un nouveau tableau. Cependant.. Les autres champs n'apparaissent pas !
Un petit coup de main s'il vous plaît ?
Code : Tout sélectionner
<!DOCTYPE>
<HTML>
<HEAD>
<meta charset="utf-8"/>
<link rel="stylesheet" href="style.css"/>
<link href='https://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'>
</HEAD>
<BODY>
<div id="entete">
<div id="espacelogo">
<img src="logo.png" id="logo"/>
<img src="titrelogo.png" id="titrelogo"/>
</div>
<h1>Vos fichiers.csv comparés en toute qualité</h1>
</div>
<div id="sousmenu"></div>
<div id="corpus">
<form method="POST" action="index.php" enctype="multipart/form-data">
<!-- On limite le fichier à 100Ko -->
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
<div id="fichiers">
<div id="entetefichiers">
<p class="p">1. Recherche des fichiers</p>
</div>
Veuillez choisir un premier fichier au format (.csv) :
<br/>
<input type="file" name="avatar" id="avatar">
<br/>
<br/>
Veuillez choisir un deuxième fichier au format (.csv) :
<br/>
<input type="file" name="avatar2" id="avatar2">
<br/>
<br/>
<div id="enteteenvoyer">
<p class="p">2. Comparer !</p>
</div>
<p id="explications">
Veuillez cliquer sur le bouton ci-contre pour établir la comparaison de vos fichiers.
<br/>
Vous aurez ensuite la possibilité de télécharger le fichier .csv généré avec les mises à jour crées en format (.csv) ou en pfd.<br/>
</p>
<input type="submit" name="envoyer" id="envoyer" value=" ">
</div>
</form>
</div>
<div id="corpustraitement">
<?php
if(isset($_POST['envoyer'])){
if (is_uploaded_file($_FILES['avatar']['tmp_name']))
{
$filename = $_FILES['avatar']['tmp_name'] . "'.";
}
else {
echo "Nom du fichier : '". $_FILES['avatar']['tmp_name'] . "'.";
}
$a1=Array();
if (($handle = fopen($_FILES['avatar']['tmp_name'], "r")) !== FALSE) {
$key = 0; // Set the array key.
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$count = count($data); //get the total keys in row
//insert data to our array
for ($i=0; $i < $count; $i++) {
$a1[$key][$i] = $data[$i];
}
$key++;
}
fclose($handle); //close file handle
}
$a2=Array();
if (($handle1 = fopen($_FILES['avatar2']['tmp_name'], "r")) !== FALSE) {
$key1 = 0; // Set the array key.
while (($data1 = fgetcsv($handle1, 1000, ",")) !== FALSE) {
$count1 = count($data1); //get the total keys in row
//insert data to our array
for ($i1=0; $i1 < $count1; $i1++) {
$a2[$key1][$i1] = $data1[$i1];
}
$key1++;
}
fclose($handle1); //close file handle
}
foreach ($a1 as $k1 => $v1) {
if ( $u = array_diff($a2[$k1], $a1[$k1]) )
{
$update_items[$k1] = $u;
}
}
print_r($update_items);
// Paramétrage de l'écriture du futur fichier CSV
$chemin = 'fichier.csv';
$delimiteur = ','; // Pour une tabulation, utiliser $delimiteur = "t";
// Création du fichier csv (le fichier est vide pour le moment)
// w+ : consulter http://php.net/manual/fr/function.fopen.php
$fichier_csv = fopen($chemin, 'w+');
// Si votre fichier a vocation a être importé dans Excel,
// vous devez impérativement utiliser la ligne ci-dessous pour corriger
// les problèmes d'affichage des caractères internationaux (les accents par exemple)
fprintf($fichier_csv, chr(0xEF).chr(0xBB).chr(0xBF));
// Boucle foreach sur chaque ligne du tableau
foreach($update_items as $ligne){
// chaque ligne en cours de lecture est insérée dans le fichier
// les valeurs présentes dans chaque ligne seront séparées par $delimiteur
fputcsv($fichier_csv, $ligne, $delimiteur);
}
// fermeture du fichier csv
fclose($fichier_csv);
}
?>
</div>
</BODY>
</HTML>