Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
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 06/09/2011, 20h15   #1
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Par défaut Comparer les valeurs d'un tableau

Bonjour à tous,

Le titre n'est pas super génial, mais je ne savais pas comment nommer ma question.

Mon script reçoit un tableau du genre :

Code :
1
2
3
4
5
6
 
array(
[0]=>12,
[1]=>25,
[2]=>108
)
Pour chaque valeur, qui sont les clés ID d'une table SQL, je fais une requête sur 2 champs (valeurs 0 ou 1) :

Code :
1
2
3
4
5
6
7
8
9
 
foreach($tableau as $cle){
 
   $sql = mysql_query("SELECT nom, champ1, champ2 FROM table WHERE id='".$cle."'");
   $row = mysql_fetch_assoc($sql);
   $nom =  $row['nom'];
   $champ1 = $row['champ1'];
   $champ2 = $row['champ2'];
}
Et c'est là que je sèche ! Car je dois identifier et ressortir les noms dont les valeurs des champs1 et champs2 ne sont pas strictement identiques.

Exemple :
"toto" : champ1 = 0, champ2 = 1
"tata" : champ1 = 0, champ2 = 1
C'est bon

"toto" : champ1 = 1, champ2 = 1
"tata" : champ1 = 0, champ2 = 0
die("tata et toto n'ont pas les mêmes valeurs");

En fait, je ne vois pas trop comment m'y prendre.
Merci de votre aide.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 20h23   #2
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 465
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2009
Messages : 465
Points : 651
Points : 651
Si j'ai bien compris tu cherche à faire ça
Code :
SELECT nom, champ1, champ2 FROM table WHERE id='".$cle."' where champ1 != champ2
Sinon alors je n'est rien compris
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 20h27   #3
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Bonsoir,

Non, pas vraiment. J'ai besoin que pour chaque clé, les champs1 et les champs2 soient identiques. Pas champ1 = ou != de champ2, mais la paire.

si "toto" a 1 comme valeur de champ1 et 0 en champ2, il faut que "tata" ait aussi 1 et 0, sinon alerte.

J'ai tenté de créer un nouveau tableau avec les données des champ 1 et 2 puis ensuite de les comparer, mais je galère.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 20h37   #4
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 465
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2009
Messages : 465
Points : 651
Points : 651
Je crois qu'il est plus facile de la vérifier avec du php que de la faire sortir avec une requête sql.
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 20h40   #5
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
ben oui : la requête ne me sert qu'à récupérer les valeurs de champ 1 et 2 pour chaque clé.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 20h51   #6
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Fais un auto-jointure SQL avec pour critère t1.champ1 = t2.champ1 AND t1.champ2 = t2.champ2, non ?
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 08h13   #7
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Bonjour,

Une auto-jointure ? Humm, je ne vois pas trop comment faire ça, puisque à chaque tour de boucle j'ai une requête avec un ID (clé du foreach).

Je pense plutôt à construire un autre tableau avec les résultats de la requête :

Code :
1
2
3
4
5
6
7
8
9
10
 
$new_tab = array();
	foreach($tab as $id){
 
		$sql = "SELECT nom, ch1, ch2 FROM table WHERE  id='".$id."'";
		$res = mysql_query($sql) or die(mysql_error());
		$row = mysql_fetch_assoc($res);
		$new_tab[$id] = array("nom"=>$row['nom'], "ch1"=>$row['ch1'], "ch2"=>$row['ch2']);
 
	}
Ce qui fait que j'obtiendrais un tableau du genre :

Citation:
Array
(
[34] => Array
(
[nom] => toto
[ch1] => 0
[ch2] => 0
)

[237] => Array
(
[nom] => tutu
[ch1] => 0
[ch2] => 0
)
// jusque là, ok, tout va bien
[282] => Array
(
[nom] => tata
[ch1] => 0
[ch2] => 1
)
//alert : tata est différente !
)
Et c'est la compraraison de ce nouveau tableau que je ne parviens pas à faire.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 08h36   #8
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Bon, j'ai trouvé une soluce qui parait fonctionner, mais ça fait un peu usine à gaz pour pas grand chose, je trouve...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
$tmp1 = array();
$tmp2 = array();
	foreach($tab as $id){
 
		$sql = "SELECT nom, ch1, ch2 FROM table WHERE  id='".$id."'";
		$res = mysql_query($sql) or die(mysql_error());
		$row = mysql_fetch_assoc($res);
		$tmp1[] = $row['ch1'], 
                $tmp2[] = $row['ch2'];
 
	}
$compare = array_diff($tmp1, $tmp2);
if(sizeof($compare) > 0){
$alerte = "Il y a une différence";
}
Mais du coup, je perds l'ID de l'élément différent et ne peux le retourner à JS / Ajax pour le dé-sélectionner dans le select multiple.
Je précise que ce PHP est appelé par ajax pour contrôler qu'un utilisateur sélectionne bien des éléments aux caractéristiques identiques dans une liste multiple...
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2011, 11h14   #9
Membre régulier
 
Inscription : juillet 2004
Messages : 92
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 92
Points : 75
Points : 75
Pourquoi ne pas utiliser un champs texte input hidden dans lequel tu met ta valeur de retour PHP si elle existe, sinon tu retourne tes valeur de selection cliente en cours de traitement "avant submit du form" et à partir de ce champs input hidden tu traite le reste en JS?
Ce qui te permet d'avoir les dernières valeurs de ton jeux de checkbox, lors des évenement onload (valeur retour PHP) et onchange (valeur retour sur tes checkbox)...
Ton script JS recupera seulement la valeur du champs de texte input hidden.
headmax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2011, 12h07   #10
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Oui, c'est pas bête ! je vais le tester et je reviens.
Merci !
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h08.


 
 
 
 
Partenaires

Hébergement Web