comparer des valeur dans un tableau

comparer des valeur dans un tableau - PHP - Programmation

Marsh Posté le 02-02-2007 à 15:16:38    

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

Reply

Marsh Posté le 02-02-2007 à 15:16:38   

Reply

Marsh Posté le 02-02-2007 à 15:28:45    

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.

Reply

Marsh Posté le 02-02-2007 à 15:30:48    

ok...un peu compliqué

Reply

Marsh Posté le 02-02-2007 à 15:36:25    

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

Reply

Marsh Posté le 02-02-2007 à 15:45:46    

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.

Reply

Marsh Posté le 02-02-2007 à 15:51:54    

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


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 02-02-2007 à 15:53:24    

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.

Reply

Marsh Posté le 02-02-2007 à 15:58:13    

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.......

Reply

Marsh Posté le 02-02-2007 à 15:59:20    

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. }


Reply

Marsh Posté le 02-02-2007 à 15:59:44    

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
Reply

Marsh Posté le 02-02-2007 à 15:59:44   

Reply

Marsh Posté le 02-02-2007 à 16:00:15    

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
Reply

Marsh Posté le 02-02-2007 à 16:01:48    

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....
 

Reply

Marsh Posté le 02-02-2007 à 16:07:26    

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"...

Reply

Marsh Posté le 02-02-2007 à 16:16:46    

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

Reply

Marsh Posté le 02-02-2007 à 16:18:31    

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 />";
  }
 }
}

Reply

Marsh Posté le 02-02-2007 à 16:19:20    

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:  

Reply

Marsh Posté le 02-02-2007 à 16:28:49    

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

Reply

Marsh Posté le 02-02-2007 à 16:31:44    

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

Reply

Marsh Posté le 02-02-2007 à 16:58:01    

Reply

Marsh Posté le 02-02-2007 à 17:48:56    

@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....

Reply

Marsh Posté le 02-02-2007 à 17:49:45    

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!

Reply

Marsh Posté le 02-02-2007 à 17:56:42    

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

Reply

Marsh Posté le 02-02-2007 à 21:12:55    

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  

Reply

Marsh Posté le 05-02-2007 à 15:14:00    

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

Reply

Marsh Posté le 05-02-2007 à 16:01:07    

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;
}

Reply

Marsh Posté le 05-02-2007 à 18:20:47    

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

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed