[PHP] Fusionner deux tableaux sur une clé

Résolu
ragnarok -  
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   894
 
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
ragnarok
 
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   Statut Membre Dernière intervention   894
 
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