Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1555 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  comparer des valeur dans un tableau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

comparer des valeur dans un tableau

n°1510127
dirty_harr​y
Posté le 02-02-2007 à 15:16:38  profilanswer
 

Bonjour,
 
Je dois parcourir un tableau afin de comparer chacune des valeurs ensemble. Si exemple la valeur de la clé 0 est égale à la valeur de la clé 1, je fais une action.
 
voici comment je parcour mon tableau:
 

Code :
  1. foreach($liste as $key => $value){
  2. echo $liste[$key]['courriel'];
  3.         echo $liste[$key]['paragraphe'];
  4. }


 
de quelle manière pourrais-je comparer les valeurs de ce tableau....si je retrouve des valeur identique, je concatène leur paragraphe ensemble......
 
merci

mood
Publicité
Posté le 02-02-2007 à 15:16:38  profilanswer
 

n°1510133
omega2
Posté le 02-02-2007 à 15:28:45  profilanswer
 

On ouvre la documentation de php au chapitre des tableaux. ( http://fr.php.net/manual/fr/ref.array.php )
Que trouvons nous dedans entre autre la liste des clés du tableau ( array_keys ) ce qui va grandement t'aider.
 
A partir de là, il suffit de boucler deux fois sur la liste des clés du tableau de maniére imbriqué. (avec foreach par exemple) ce qui te permettra de comparer chaque couple de valeurs.
 
A noter "unset" permet de suprimer une variable ou une case d'un tableau. Ca te permettra de faire le ménage dans ton tableau en suprimant tous les éléments dont le contenu à été regroupé avec le contenu d'une autre case. Pour éviter les problémes, il est préférable de noter dans un autre tableau les clés à suprimer et de remplacer le texte par une chaine vide pendant le parcours du tableau principal et de ne suprimer les cases en trop qu'aprés avoir finis de tout vérifier.

n°1510135
dirty_harr​y
Posté le 02-02-2007 à 15:30:48  profilanswer
 

ok...un peu compliqué

n°1510138
dirty_harr​y
Posté le 02-02-2007 à 15:36:25  profilanswer
 

Peux-tu être plus clair ou montrer un exemple ?

n°1510144
dirty_harr​y
Posté le 02-02-2007 à 15:45:46  profilanswer
 

Je réexplique un peu.....
 
voici mon tableau:
 
Array
(
    ['courriel'] => toto@toto.com
    ['paragraphe'] => bla bla bla bla bla
)
Array
(
    ['courriel'] => titi@toto.com
    ['paragraphe'] => bla bla bla bla bla
)
Array
(
    ['courriel'] => tata@toto.com
    ['paragraphe'] => bla bla bla bla bla
)
 
je veux parcourir le tableau afin de comparer les courriel semblable.....si j'en rancontre des semblables, je concatène la valeur de leur paragraphe.

n°1510150
sielfried
Posté le 02-02-2007 à 15:51:54  profilanswer
 

C'est pas un tableau ça, c'est 3 tableaux...  [:figti]  
 
Y en a plusieurs ?


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1510152
omega2
Posté le 02-02-2007 à 15:53:24  profilanswer
 

Si tu devais résoudre ce probléme en écrivant en francais la façon dont tu t'y prends, ca donerait quoi?
 
PS : Ca c'est le premier truc qu'on nous a enseigné à l'IUT : faire un algorythme de la résolution d'un probléme. En gros, écrire avec des verbes et des mots francais (par exemple "attraper cuilliére" ) les différentes étapes qui aménent de la situation initiale à une situation où le probléme est résolut) Aprés avoir fait ça, t'arriveras surement à écrire plus facilement ton script en php vu qu'il ne s'agira plus que de traduction.

n°1510158
dirty_harr​y
Posté le 02-02-2007 à 15:58:13  profilanswer
 

Array{
       [0] => Array
             (
               ['courriel'] => toto@toto.com
               ['paragraphe'] => bla bla bla bla bla
             )
       [1] => Array
             (
               ['courriel'] => titi@toto.com
               ['paragraphe'] => bla bla bla bla bla
             )
       [2] => Array
            (
              ['courriel'] => tata@toto.com
              ['paragraphe'] => bla bla bla bla bla
            )  
}
 
ceci plutôt.......

n°1510159
soju
One shot !
Posté le 02-02-2007 à 15:59:20  profilanswer
 

tu pourrais par exemple construire un 3ème tableau avec comme clé les adresses et comme valeurs les paragraphes

Code :
  1. $data = array();
  2. foreach($liste as $value) {
  3.   if (isset($data[$value['courriel']])) $data[$value['courriel']].= $value['paragraphe'];
  4.   else $data[$value['courriel']] = $value['paragraphe'];
  5. }


n°1510161
rufo
Pas me confondre avec Lycos!
Posté le 02-02-2007 à 15:59:44  profilanswer
 

omega2 a écrit :

On ouvre la documentation de php au chapitre des tableaux. ( http://fr.php.net/manual/fr/ref.array.php )
Que trouvons nous dedans entre autre la liste des clés du tableau ( array_keys ) ce qui va grandement t'aider.
 
A partir de là, il suffit de boucler deux fois sur la liste des clés du tableau de maniére imbriqué. (avec foreach par exemple) ce qui te permettra de comparer chaque couple de valeurs.
 
A noter "unset" permet de suprimer une variable ou une case d'un tableau. Ca te permettra de faire le ménage dans ton tableau en suprimant tous les éléments dont le contenu à été regroupé avec le contenu d'une autre case. Pour éviter les problémes, il est préférable de noter dans un autre tableau les clés à suprimer et de remplacer le texte par une chaine vide pendant le parcours du tableau principal et de ne suprimer les cases en trop qu'aprés avoir finis de tout vérifier.


 
j'ai mis du temps à comprendre ce que tu lui proposais de faire!
 

Code :
  1. // On reformate la variable $liste pour pouvoir utiliser array_keys facilement derrière
  2. $ArrayListe = array('courriel' => array(), 'paragraphe' => array());
  3. foreach($liste as $key => $value) {
  4.     $ArrayListe['courriel'][] = $liste[$key]['courriel'];
  5.     $ArrayListe['paragraphe'][] = $liste[$key]['paragraphe'];
  6. }
  7. // Résultat sous la forme d'un tableau associatif : clé = courriel et valeur = paragraphes concaténés
  8. $ArrayResult = array();
  9. foreach($ArrayListe['courriel'] as $Key => $CurrentValue) {
  10.     $ArrayKeys = array_keys($ArrayListe['courriel'], $CurrentValue);
  11.     $ArrayResult[$CurrentValue] = '';
  12.     foreach($ArrayKeys as $CurrentKey) {
  13.         $ArrayResult[$CurrentValue] .= $ArrayListe['paragraphe'][$CurrentKey];
  14.     }
  15. }


 
Ca devrait marcher je pense...Bon par contre, c'est pas optimiser du tout  :whistle:


Message édité par rufo le 02-02-2007 à 16:02:34
mood
Publicité
Posté le 02-02-2007 à 15:59:44  profilanswer
 

n°1510163
anapajari
s/travail/glanding on hfr/gs;
Posté le 02-02-2007 à 16:00:15  profilanswer
 

nan mais surtout ça se résoud en une seule boucle hein [:pingouino] je vois pas trop où est le problème:

Code :
  1. $courriel = array();
  2. foreach($tonTableau as $element){
  3.   $courriel[$element['courriel']] .= "\n".$element['paragraphe'];
  4. }


et zou tu as un nouveau tableau avec comme clé le destinataire et comme valeur la concaténation des paragraphes.

 

Mais perso je sens que tu dois galérer avec le resultat d'une requete SQL, je me permets donc de te conseiller la lecture de la doc sur la fonction group_concat

 

edit: burned by soju, mais il est à noter que le contrôle sur l'existence de la clé sert strictement à rien vu comment PHP gère trop bien ([:pingouino]) les tableaux.

Message cité 1 fois
Message édité par anapajari le 02-02-2007 à 16:01:44
n°1510164
dirty_harr​y
Posté le 02-02-2007 à 16:01:48  profilanswer
 

en francais ca donne ceci.....
 
je parcour le tableau;
attrape valeur de ['courriel'];
mettre dans variable pour comparer avec autre valeurs;
si pareil, j'affiche le paragraphe;
 
genre....
 

n°1510169
soju
One shot !
Posté le 02-02-2007 à 16:07:26  profilanswer
 

anapajari a écrit :

mais il est à noter que le contrôle sur l'existence de la clé sert strictement à rien

ça sert quand même à éviter les notices "Undefined index"...

n°1510174
dirty_harr​y
Posté le 02-02-2007 à 16:16:46  profilanswer
 

vous êtes tous bien gentil de m'aider, après avoir testé tout les propositions...aucune ne fonctionne........héhé dsl....je suis un peu nouveau

n°1510177
dirty_harr​y
Posté le 02-02-2007 à 16:18:31  profilanswer
 

avec ceci.......je me rapproche on dirait....
 
$val = $liste[$key]['courriel'];
$i=$key;
 foreach($liste as $key => $value){
  if ($val == $liste[$key]['courriel']&&$i!=$key) {
   //echo $val;
   echo $liste[$key]['courriel'];
   echo "<br />";
  }
 }
}

n°1510179
anapajari
s/travail/glanding on hfr/gs;
Posté le 02-02-2007 à 16:19:20  profilanswer
 

dirty_harry a écrit :

vous êtes tous bien gentil de m'aider, après avoir testé tout les propositions...aucune ne fonctionne........héhé dsl....je suis un peu nouveau


 [:roane]  [:roane] euh nan hein ... toutes fonctionnent
 

soju a écrit :

ça sert quand même à éviter les notices "Undefined index"...


touché  :jap:  

n°1510187
dirty_harr​y
Posté le 02-02-2007 à 16:28:49  profilanswer
 

@anapajari....
 
le tien y fonctionne ? ?si j'essaie ta façon, y a rien qui s'affiche

n°1510188
dirty_harr​y
Posté le 02-02-2007 à 16:31:44  profilanswer
 

jme suiis trompé, j'ai quelque chose.......des undefined index

n°1510197
sielfried
Posté le 02-02-2007 à 16:58:01  profilanswer
 
n°1510209
dirty_harr​y
Posté le 02-02-2007 à 17:48:56  profilanswer
 

@soju......
 
avec ta méthode, chaque nouveau courriel rencontré pour la premiere fois sera pas pris, mais la suite du meme courriel oui...il va donc manquer le début de chaque message ou paragraphe....

n°1510210
anapajari
s/travail/glanding on hfr/gs;
Posté le 02-02-2007 à 17:49:45  profilanswer
 

dirty_harry a écrit :

jme suiis trompé, j'ai quelque chose.......des undefined index


soju a écrit :

ça sert quand même à éviter les notices "Undefined index"...


:o
 
Donc comme le précisait soju le test sur le isset est nécessaire, reporte toi à son code!

n°1510213
dirty_harr​y
Posté le 02-02-2007 à 17:56:42  profilanswer
 

dans  le sens de ca sert à éviter les undefinded, mais pas vraiment :o

n°1510252
soju
One shot !
Posté le 02-02-2007 à 21:12:55  profilanswer
 

dirty_harry a écrit :

avec ta méthode, chaque nouveau courriel rencontré pour la premiere fois sera pas pris, mais la suite du meme courriel oui...il va donc manquer le début de chaque message ou paragraphe....

tsss... t'as testé ?  :o  

n°1510942
dirty_harr​y
Posté le 05-02-2007 à 15:14:00  profilanswer
 

soju a écrit :

tu pourrais par exemple construire un 3ème tableau avec comme clé les adresses et comme valeurs les paragraphes

Code :
  1. $data = array();
  2. foreach($liste as $value) {
  3.   if (isset($data[$value['courriel']])) $data[$value['courriel']].= $value['paragraphe'];
  4.   else $data[$value['courriel']] = $value['paragraphe'];
  5. }



 
 
Juste comme ça soju......ton 3ième tableau, tu l'imbrique à l'intérieur des 2 premier ?   ;)  dsl, c'est lundi

n°1510974
dirty_harr​y
Posté le 05-02-2007 à 16:01:07  profilanswer
 

mon problème est résolu :
 
foreach( $liste as $num_liste => $array )
{
    if ( isset($contenu[$liste[$num_liste]['courriel']]) )
    {
        $contenu[$liste[$num_liste]['courriel']] .= "\n".$liste[$num_liste]['paragraphe'];
    }
    else
    {
        $contenu[$liste[$num_liste]['courriel']]  = $liste[$num_liste]['paragraphe'];
    }
}
 
foreach( $contenu as $courriel => $paragraphe )
{
 echo $courriel. ' '.$paragraphe;
}

n°1511071
anapajari
s/travail/glanding on hfr/gs;
Posté le 05-02-2007 à 18:20:47  profilanswer
 

oui donc exactement ce que Rufo avait écrit [:pingouino]

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  comparer des valeur dans un tableau

 

Sujets relatifs
renvoyer 2 tableaux avec returnRecherhce d'une valeur dan un fichier texte
Tableau dans un div qui permet de scroller le contenu, pas l'en-tête.Tableau avec ombre en bas et à droite
[C] Construire un tableau à partir d'un fichier[PHP] Recherche d'un module pour création de tableau du style Excel
Apparence d'un tableau...?? (pointillés)pb scipt shell comparer un argument a une valeur dan un fichier
faire tableau avec des donnees recuperees d'un file xml 
Plus de sujets relatifs à : comparer des valeur dans un tableau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR