[PHP] Fusionner deux tableaux sur une clé [Résolu/Fermé]

Signaler
-
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
-
Bonjour,

Je souhaite fusionner deux tableaux dont les données sont issues de deux fichiers à plat.

La structure des fichiers est la suivante :

ville;code;valeur;date

les contraintes :

- le code du fichier 1 est A et le code du fichier 2 est B
- il ne peut y avoir qu'une seule fois une ville par fichier et par date, seule la valeur peut etre différente
- il y a le meme nombre de ligne dans fichier et fichier 2

Exemple :
fichier 1
paris;A;15;2010-06-10
paris;A;10;2010-05-25
marseille;A;16;2010-06-10

fichier 2
paris;B;15;2010-06-10
paris;A;10;2010-05-25
marseille;B;15;2010-06-10


Je souhaite transformer en :
ville;valeurA;valeurB;valeurA-B;date
paris;15;15;0;2010-06-10
paris;10;10;0;2010-05-25
marseille;16;15;1;2010-06-10



Merci à vous !!

3 réponses

Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
884
une solution ,je n'ai pas fait de test

<?php
//on va lire les fihciers, exploder chaque ligne par rapport à ;
//paris;A;15;2010-06-10

//et empiler ça dans un array multidimentions
//array[ville][date][A ou B][valeur]

//fonction php
function empile_dans_array($array_fichier,$array_final,$lettre){
	//empilage dans l'array
	for($i=0;$i<sizeof($array_fichier1);$i++){
		//on parcours chaque ligne
		//explode de la ligne
		$array_ligne=explode(';',$array_fichier1[$i]);
		$array_final[$array_ligne[0]][$array_ligne[3]][$lettre]['valeur'] = $array_ligne[2];
	}
	return $array_final;
}

$array_final=array(); //init array
//lecture fichier 1
$array_fichier1=file('fichier1.txt');
//appel fonction
$array_final = empile_dans_array($array_fichier1,$array_final,'A');
$array_fichier1=array(); //on vide

//lecture fichier 2
$array_fichier2=file('fichier2.txt');
//appel fonction
$array_final = empile_dans_array($array_fichier2,$array_final,'B');
$array_fichier2=array(); //on vide

//calculs et affichage
if(sizeof($array_final)>0){
	echo '<table>';
	echo '<tr><th>Ville</th><th>Valeur A</th><th>Valeur B</th><th>A-B</th><th>Date</th></tr>';
	foreach($array_final as $ville=>$s_array1){
		foreach($s_array1 as $date=>$s_array2){
			echo '<tr><td>'.$ville.'</td><td>'.$s_array2['A'].'</td><td>'.$s_array2['B'].'</td><td>'.($s_array2['A'] - $s_array2['B']).'</td><td>'.$date.'</td></tr>';
		
		}
	}

	echo '</table>';
}
?>
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Dans la fonction, remplacer $array_fichier1 par $array_fichier

Et pour l'affichage, ajout de ['valeur']

echo '<tr><td>'.$ville.'</td><td>'.$s_array2['A']['valeur'].'</td><td>'.$s_array2['B']['valeur'].'</td><td>'.($s_array2['A']['valeur'] - $s_array2['B']['valeur]).'</td><td>'.$date.'</td></tr>';

Et ça roule impec' !!

Merci.
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
884
c'est vrai que j'avais commencé avec le fichier1 et fait la fonction ensuite d'où l'erreur

tu as très bien vu tout ça, bravo !