[PHP] Fusionner deux tableaux sur une clé

Résolu
ragnarok -  
Alain_42 Messages postés 5413 Statut Membre -
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

  1. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
  2. 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
  3. Alain_42 Messages postés 5413 Statut Membre 904
     
    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