Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/12/2011, 15h54   #1
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
Par défaut recuperer les doublons dans un array multidimentionnel

je me suis penché depuis pas mal de temps sur ce problème sans succès .
j'ai un tableau array de cette façon
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
    [46] => Array
        (
            [fich] => cmd_f
            [ref] => 12V 16A 
            [qty] => 5
            [pa] => $24,82
        )
 
    [34] => Array
        (
            [fich] => cmd_f
            [ref] => 12V-2A
            [qty] => 300
            [pa] => $2,88
        )
 
    [16] => Array
        (
            [fich] => cdm_stat
            [ref] => 12V-2A
            [qty] => 300
            [pa] => 3,54
        )
j'aimerai que quand il y a un doublon sur le champ ref (dans cette exemple c'est 12v-2a)
j'aimerai récupérer dans un autre tableau ayant comme structure ceci:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
    [1] => Array
        (
            [fich] => cmd_f
            [ref] => 12V 16A 
            [qty] => 5
            [pa] => $24,82
            [fich1] => 
            [ref1] => 
            [qty1] => 
            [pa1] => 
        )
 
    [2] => Array
        (
            [fich] => cmd_f
            [ref] => 12V-2A
            [qty] => 300
            [pa] => $2,88
            [fich1] => cdm_stat
            [ref1] => 12V-2A
            [qty1] => 300
            [pa1] => 3,54
        )
merci pour votre aide
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 18h08   #2
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
//Array de départ avec des doublons
$arrayInitial = array();
//Array temporaire
$arrayTemp = $arrayInitial;
//Array final
$arrayFinal = array();
foreach ( $arrayInitial as $value ) {
	foreach ( $arrayTemp as $value2 ) {
		if ( $value['fich'] == $value2['fich'] && $value['qty'] == $value2['qty'] && $value['pa'] == $value2['pa'] ) {
			if ( $value['ref'] != $value2['ref'] ) {
			 array_push($arrayFinal, $value);
			}
		}
		else {
			array_push($arrayFinal, $value);
		}
	}
}
 
print_r($arrayFinal);
Ca devrait te soulager.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 20h00   #3
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
oh la la un métèorite est passé pour m'aider.
je teste de suite
merci
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 11h18   #4
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bonjour,

je ne pense pas que cela soit une très bonne approche de changer les clés du tableau à chaque doublon trouvé : fiche -> fiche1 -> fiche2... Il serait préférable de créer ton tableau différemment : Array([] => Array(ref => Array([] => Array(cle => valeur)))). Tu isoles les références qui te servent à indentifier tes doublons et tu y rattaches les doublons trouvés tout en préservant leurs clés.
De cette manière pas besoin de savoir si la clé est fiche1 ou fiche2, elle sera toujours fiche quel que soit le doublons lu.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 12h20   #5
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
Citation:
Envoyé par rawsrc Voir le message
[/codeinline] Il serait préférable de créer ton tableau différemment : Array([] => Array(ref => Array([] => Array(cle => valeur)))).
oh là.
je ne sais pas quelle sera la structure de ce tableau
un exemple m'aiderait à mieux comprendre
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 13h52   #6
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Avec ce code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
$data = array(
   array('fich' => 'cmd_f', 'ref' => '12V 16A', 'qty' => 5, 'pa' => '$24,82'),
   array('fich' => 'cmd_f', 'ref' => '12V-2A', 'qty' => 300, 'pa' => '$2,88'),
   array('fich' => 'cmd_stat', 'ref' => '12V-2A', 'qty' => 300, 'pa' => '$3,54')
);
 
$result = array();
foreach($data as $details) {
   $result[$details['ref']][] = array_diff_key($details, array('ref' => null));
}
?>
Tu obtiens ceci :
Code :
1
2
3
4
5
6
Array(
   [12V 16A] => Array([0] => Array([fich] => cmd_f    [qty] => 5   [pa] => $24,82))
 
   [12V-2A]  => Array([0] => Array([fich] => cmd_f    [qty] => 300 [pa] => $2,88)
                      [1] => Array([fich] => cmd_stat [qty] => 300 [pa] => $3,54))
)
Tes doublons sont regroupés par référence et j'ai simplifié la structure du tableau dans le poste précédent en Array(ref => Array([] => data))
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 14h12   #7
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
ca a l'air simple rawsrc comme code mais pas aussi facile à comprendre.
Je crois avoir compris .c'est assez astucieux.je teste pour voir
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 15h15   #8
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
et si je veux avoir çà:
quand il trouve un doublon il met en une seule ligne comme ceci
Code :
1
2
3
4
5
6
 
Array(
   [12V 16A] => Array([0] => Array([fich] => cmd_f    [qty] => 5   [pa] => $24,82 [fich1] =>  [qty1] =>  [pa1] => ))
 
   [12V-2A]  => Array([0] => Array([fich] => cmd_f    [qty] => 300 [pa] => $2,88 [fich1] => cmd_stat [qty1] => 300 [pa1] => $3,54))
)
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 15h29   #9
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Ce que tu veux me parait absurde sans compter que comment savoir qu'il faille rajouter des clés vides fich1, qty1, pa1 à la référence [12V 16A] alors qu'il n'y a aucun doublon ? En fonction de quelle règle ?
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 15h33   #10
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
en fait c'est pour pouvoir exporter les données du tableau en fichier plat csv.
si je trouve un doublon,pour une meme référence exemple(12v-2a) ,je peux ainsi comparer plus facilement l'ancien prix d'achat avec le nouveaux prix d'achat pa1 et pa, calculer les ratios ect..
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 09h05   #11
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
merci quand meme à tous les 2.j'ai réussi à faire ce que je veux avec un code long et pas super propre et bien sur en adaptant vos codes.Pas grave faut faire avec
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 09h53   #12
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Si ça marche tant mieux.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h54.


 
 
 
 
Partenaires

Hébergement Web