Problème avec les tableaux (arrays) PHP!!!!

Fermé
Emmash Messages postés 18 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 8 octobre 2008 - 8 oct. 2008 à 18:34
 Emmash - 9 oct. 2008 à 14:24
Bonjour,

j'ai des problèmes avec les tableaux

//Mémorisation des noms des différents tableaux
if($cpt_couleur+1<count($_POST["couleur"])){
$liste_tableaux_couleur.=${"tab_resultat_couleur".$cpt_couleur}.",";
}
else{
$liste_tableaux_couleur.=${"tab_resultat_couleur".$cpt_couleur};
}

//Conserver seulement les valeur communes dans toutes les tableaux
if(count($_POST["couleur"])>1){
$tab_resultat_couleur=array_merge(array_intersect( $liste_tableaux_couleur));
}
else{
$tab_resultat_couleur=$liste_tableaux_couleur;
}

Mon problème est que la fonction array_intersect a besoin de 2 paramètres pour fonctionner...
J'ai aussi essayé d'utiliser des variables dynamiques, mais je crois que je n'ai pas codé correctement,
car ça n'a pas fonctionné. Y a-t'il une façon d'écrire le contenu de la $liste_tableaux_couleur dans la fonction array_intersect...
quelque chose qui exécuterait la ligne comme :
$tab_resultat_couleur=array_merge(array_intersect( $tab_resultat_couleur0,$tab_resultat_couleur1,$tab _resultat_couleur2));
...

Merci beaucoup à l'avance!!

Marie-Hélène

10 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
8 oct. 2008 à 18:41
Bonsoir,

je ne comprend pas tu veux faire array_merge c a d ajouter (déja la aussi il faut plusieurs paramètres) des intersection de tableaux ?

ensuite pourquoi dans $liste_tableaux_couleur.=$.....

tu mets .=
0
Emmash Messages postés 18 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 8 octobre 2008
8 oct. 2008 à 18:51
En fait, dépendamment de ce que l'utilisateur a sélectionnée,

1,2,3 ou x nombre de tableaux sont créés.

Donc dans ma variable $liste_tableaux_couleur, je mémorise tous les noms des tableaux crées...

Ça donnera quelque chose du genre :

$liste_tableaux_couleur=$tab_resultat_couleur0; la première fois qu'on passera dans la boucle
$liste_tableaux_couleur=$tab_resultat_couleur0,$tab_resultat_couleur1; la deuxième fois
etc...

Ensuite tout ce que je voudrais faire ce serait de comparer les valeurs de tous les tableaux
crées pour ne conserver que les données qui sont communes dans tous les tableaux...

Il faudrait que ça donne quelque chose du genre :
$tab_resultat_couleur=array_merge(array_intersect( $tab_resultat_couleur0,$tab_resultat_couleur1,$tab _resultat_couleur2));

Mais le problème c'est qu'en faisant $tab_resultat_couleur=array_merge(array_intersect($liste_tableaux_couleur));
pour aller chercher la liste des tableaux créés, ça ne fonctionne pas puisque la fonction array_intersect s'attend à recevoir 2 paramètres et non un seul... Y'a-t-il moyen d'écrire le contenu de la variable directement?

Merci!!!

Marie-Hélène
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
8 oct. 2008 à 19:07
et pourqoui ne pas faire ?

$liste_tableaux_couleur=array();

$liste_tableaux_couleur[]=${"tab_resultat_couleur".$cpt_couleur}


tu auras ainsi un array à deux dimensions
0
Emmash Messages postés 18 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 8 octobre 2008
8 oct. 2008 à 19:19
Non c'est quand fait c'est un moteur de recherche pour des images.

J'ai différentes couleurs qui sont donc affichés dans ma page...

Ces couleurs sont mémorisés dans mon $_POST["couleur"] qui est donc le tableau contenant toutes les couleurs cochées

Par la suite, dans une boucle, je parcoure chaque couleur du tableau pour faire une requête et sélectionner les images qui correspondent aux couleurs sélectionnées. Donc, pour chaque couleur, je crée un tableau et c'est pour ça
qu'à chaque fois que je passe dans la boucle je crée un tableau contenant les résultats pour cette couleur : ${"tab_resultat_couleur".$cpt_couleur}... et ce que je veux faire c'est de n'afficher que les images qui contiennent toutes les couleurs donc je place tous les noms des tableaux dans la variable $liste_tableaux_couleur et par la suite, je dois faire un array_intersect pour afficher uniquement les no des images contenu dans tous les tableaux. Donc le tableau à deux dimensions, ça ne règle pas mon problème, car je ne sais jamais combien de tableaux vont avoir été créés.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
8 oct. 2008 à 19:25
Ha d'accord mais pourquoi tu fais array_merge ?

$tab_resultat_couleur=array_intersect($liste_tab­leaux_couleur); 


devrait te donner un array des couleurs communes
0
Emmash Messages postés 18 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 8 octobre 2008
8 oct. 2008 à 19:22
$liste_tableaux_couleur c'est seulement une variable pour mémoriser les noms des tableaux crées...

je veux seulement réussir à inscrire tous les noms des tableaux dans la fonction array_intersect

je ne peux pas faire array_intersect($liste_tableaux_couleur), car il voit un seul paramètre et non plusieurs...

je voudrais que ça donne quelque chose du genre : array_intersect($tab_resultat_couleur0,$tab_resultat_couleur1,...)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Emmash Messages postés 18 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 8 octobre 2008
8 oct. 2008 à 19:28
Parce que si je fais seulement un array_intersect, ça garde mes index tels quels donc je peux commencer avec l'index 3 au lieu de l'index 0... array_merge permet de réséquencer tous les index des données restantes...

As-tu une idée de comment je peux faire pour mon problème?
0
Emmash Messages postés 18 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 8 octobre 2008
8 oct. 2008 à 19:29
Et puis non array_intersect($liste_tab­leaux_coule­ur) ne fonctionne pas, car il doit y avoir au moins 2 tableaux et là il comprend pas qu'il doit lire le contenu de la variable. Il utilise $liste_tableaux_couleur en pensant que c'est le nom du tableau en question.
0
Utilisateur anonyme
8 oct. 2008 à 19:30
Bonsoir,
je ne vois pas bien ce que vous souhaitez faire mais en lisant tout j'ai une idée qui pourrait peut être vous satisfaire.

au moment de la création de tableau vous créez un tableau donc le premier indice est la couleur
$tableau[couleur]
puis en second indice un rang 1,2,3 pour chaque ilage de cette couleur et en indice 3 le nom ou le numéro de l'image.

si j'ai rien compris ne m'en tenez pas rigueur.
cordialement
0
Emmash Messages postés 18 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 8 octobre 2008
8 oct. 2008 à 20:22
Le problème c'est qu'on ne peut pas faire de array_intersect dans le même tableau, il faut absolument avoir au moins deux tableaux en paramètre.
0
Emmash Messages postés 18 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 8 octobre 2008
8 oct. 2008 à 20:35
Je veux juste trouver une manière de faire afficher le contenu de ma variable $liste_tableaux_couleur dans ma fonction
array_intersect() pour que ça donne quelque chose comme array_intersect($tableau1,$tableau2,$tableau3...)... tous les noms des tableaux se trouvent dans ma variable $liste_tableaux_couleur mais je ne peux pas faire array_intersect($liste_tableaux_couleur), car il faut au moins deux paramètres, y'a-t-il moyen d'écrire les valeurs de ma variable directement entre les parenthèses de la fonction????

Merci,

Marie-Hélène
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
9 oct. 2008 à 09:46
Tu peux peut être essayer de leurrer la fonction

$array_couleurs=array("bleu","jaune","vert", etc..); //dans cet array tu mets toutes tes couleurs possibles
array_intersect($liste_tableaux_couleur,$array_couleurs);

0
Bonjour tout le monde,

un internaute sur un autre forum m'a aidé à résoudre mon problème... voici la solution :

eval( '$tab_resultat_couleur = array_merge(array_intersect(' . $liste_tableaux_couleur . '));' );

Bonne journée!

Marie-Hélène
0