IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Fusionner deux tableaux sans addition


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    septembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : septembre 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut Fusionner deux tableaux sans addition
    Bonjour
    Débutant en array je me prends la tête sur un concept que je n'arrive pas à réaliser.

    J'ai deux tableaux, chacun a les mêmes champs à savoir ID et QTE, chacun peut avoir des nombres d'entrées différentes. Je cherche à fusionner les deux et donc NE PAS additionner les ID mais additionner par contre les QTE...

    Je cherche avec les array merge, combine etc.

    Par exemple :
    - si Array1 : 2-5 / 3-2 / 6-1
    - si Array2 : 2-3 / 6-2

    J'aimerai que mon array final soit : 2-8 / 3-2 / 6-3

    J'ai du mal à trouver les mots, bref merci par avance ! En plus du code je suis preneur d'une mini explication car là je sèche littéralement.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    septembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : septembre 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    J'ai réussi mais c'est immonde... Si quelqu'un a mieux je prends.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    	$listeID	 = array();
    	$produits	 = array_merge($panierArray, $achatArray);
     
    	foreach($produits as $produitInfo) {
    		if(in_array($produitInfo['id'], $listeID)) {
    			${'QTE'.$produitInfo['id']} += $produitInfo['qte'];
    		} else {
    			$listeID[] = $produitInfo['id'];
     
    			${'QTE'.$produitInfo['id']} = $produitInfo['qte'];
    		}
    	}
     
    	foreach($listeID as $idProduit) {
    		echo $idProduit.'-'.${'QTE'.$idProduit}.'<br>';
    	}
    J'ai pas pris le temps de finir mais j'ai bel et bien la quantité additionnée pour chaque ID, je n'ai plus qu'à refaire un tableau unique.

  3. #3
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    juin 2003
    Messages
    7 976
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 7 976
    Points : 12 430
    Points
    12 430
    Par défaut
    vous pouvez faire tout cela avec des tableaux comme cela par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    // données de départ
     
    $panierArray = [
    	[
    		"id" => "2",
    		"qte" => "5",
    	],
    	[
    		"id" => "2",
    		"qte" => "1",
    	],
    ];
     
     
    $achatArray = [
    	[
    		"id" => "3",
    		"qte" => "1",
    	],
    ];
     
     
    // fusion
     
    $produits = array_merge($panierArray, $achatArray);
     
    $quantites = [];
     
     
    foreach ($produits as $produit) {
     
    	if (!isset($quantites[$produit["id"]])) {
    		$quantites[$produit["id"]] = 0;
    	}
     
    	$quantites[$produit["id"]] += $produit["qte"];
     
    }
     
     
    // affichage
     
    foreach ($quantites as $id_produit => $quantite) {
     
    	echo "id_produit : $id_produit - quantité : $quantite<br/>";
     
    }

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Architecte Web / Android
    Inscrit en
    août 2003
    Messages
    6 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 6 242
    Points : 17 918
    Points
    17 918
    Par défaut
    Quelque chose comme ca devrait faire l'affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $a1 = [2=>5,3=>2,6=>1];
    $a2 =  [2=>3, 6=>2];
     
    $somme= array();
    foreach (array_keys($a1+$a2) as $key) {
        $somme[$key] = ($a1[$key] ?? 0) + ($a2[$key] ?? 0);
    }
     
    var_dump($somme);
    En gros on récupère la liste de toutes les clé des tableaux en faisant une union ($a1+$a2) et un array_keys.
    Et après on ajoute ces clés entre elles.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    mars 2009
    Messages
    2 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : mars 2009
    Messages : 2 306
    Points : 5 031
    Points
    5 031
    Par défaut
    Citation Envoyé par grunk Voir le message
    on récupère la liste de toutes les clé des tableaux en faisant une union ($a1+$a2) et un array_keys.
    Le problème c'est que les IDs ne sont pas les clefs du tableau mais des valeurs dans les sous-tableaux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $arr1 = [
        [ 'ID' => 2, 'QTE' => 5 ],
        [ 'ID' => 3, 'QTE' => 2 ],
        [ 'ID' => 6, 'QTE' => 1 ]
    ];
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    septembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : septembre 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Au top ! Merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fusionner deux tableaux
    Par jeronimo83 dans le forum Langage
    Réponses: 2
    Dernier message: 08/09/2008, 11h54
  2. [CS3] fusionner deux tableaux d'orientation différentes
    Par isa68 dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 09/08/2008, 11h18
  3. [Tableaux] Fusionner deux tableaux
    Par nicerico dans le forum Langage
    Réponses: 4
    Dernier message: 06/09/2007, 13h57
  4. [Tableaux] Fusionner deux tableaux
    Par lodan dans le forum Langage
    Réponses: 4
    Dernier message: 09/11/2006, 13h42
  5. fusionner deux tableaux triés ?
    Par sami_c dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 08/06/2006, 12h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo