[PHP] Fusionner deux tableaux sur une clé

Résolu/Fermé
ragnarok - 29 juin 2010 à 18:23
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 30 juin 2010 à 15:22
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 !!
A voir également:

3 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
29 juin 2010 à 19:15
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
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.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
30 juin 2010 à 15:22
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 !
0