comparer des valeur dans un tableau - PHP - Programmation
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.
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.
Marsh Posté le 02-02-2007 à 15:51:54
C'est pas un tableau ça, c'est 3 tableaux...
Y en a plusieurs ?
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.
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.......
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 :
|
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 ) |
j'ai mis du temps à comprendre ce que tu lui proposais de faire!
Code :
|
Ca devrait marcher je pense...Bon par contre, c'est pas optimiser du tout
Marsh Posté le 02-02-2007 à 16:00:15
nan mais surtout ça se résoud en une seule boucle hein je vois pas trop où est le problème:
Code :
|
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 () les tableaux.
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....
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"...
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
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 />";
}
}
}
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 |
euh nan hein ... toutes fonctionnent
soju a écrit : ça sert quand même à éviter les notices "Undefined index"... |
touché
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
Marsh Posté le 02-02-2007 à 16:31:44
ReplyMarsh Posté le 02-02-2007 à 16:58:01
ReplyMarsh 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....
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"... |
Donc comme le précisait soju le test sur le isset est nécessaire, reporte toi à son code!
Marsh Posté le 02-02-2007 à 17:56:42
dans le sens de ca sert à éviter les undefinded, mais pas vraiment
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é ?
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
|
Juste comme ça soju......ton 3ième tableau, tu l'imbrique à l'intérieur des 2 premier ? dsl, c'est lundi
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;
}
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:
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