Page 1 sur 1

Vérifier si toutes les valeurs sont différentes

Posté : 19 janv. 2006, 03:38
par spirou
Bonsoir, ou plutôt bonne nuit !!

Je souhaiterais pouvoir vérifier de manière simplifiée si toutes les valeurs d'une liste ou d'un array sont bien différentes, et si ce n'était pas le cas que cela me retourne ou m'identifie les valeurs égales.

Je pourrais bien entendu utiliser les conditions, mais si j'ai 15 valeurs à vérifier, il faudrait que je l'utilise 15 fois, une condition pour chaque valeur, plus encore 14 conditions dans chacune des précédentes pour identifier les valeurs égales.

Ca fait beaucoup #-o

Y'a t-il un moyen plus simple de faire ceci et avec quelle fonction ?

Posté : 19 janv. 2006, 09:27
par Tictac
Voici un code mais que je pense etre +- correct mais j'ai pas testé :
// Voici ton array 
$array = array("fleur","petale","tige","tige") ;
//combien de valeur dans l'array ? 
$nb_value = sizeof($array); 

//crée un deuxieme array pour les comparer ensuite 
$array2 = $array ; 
$cle = "";

//Boucle pour passer chaque valeur 
for ($i = 0 ; $i < $nb_value ; $i++) 
        { 
		//enlevons la première clé du $array 
		 $array_s = array_shift($array); 
         if (in_array($array2[$i],$array,true) == TRUE) 
                { 
                 $cle .=  "La clé ".$array2[$i]." existe déjà dans l'array !<br>"; 
                } 
         else{
                //tu fais ce que tu veux ;)
               }
        } 
//dans le cas present , tu vas avoir 
//La clé tige existe déjà dans l'array!		
print $cle ; 
tu as possiblité ensuite d'enlever les doublons grace à cette fonction =>
array_unique();

http://php.belnet.be/manual/fr/function ... unique.php

Posté : 19 janv. 2006, 16:32
par spirou
Merci Tictac, ça fonctionne presque comme je veux.

J'aurais par contre besoin qu'on m'explique le true dans le in_array.
J'ai regardé sur php.net, mais j'ai pas compris à quoi sert exactement ce 3ème paramètre.

J'ai aussi un problème de compréhension sur cette ligne :
$array_s = array_shift($array);
La fonction, c'est bon, j'ai compris à quoi elle sert, pas de problème, mais c'est son application dans ton code que je ne comprends pas, puisque $array_s n'est pas utilisé par la suite.

Ensuite j'arrive à récupérer la position dans la chaine du 1er paramètre en double en récupérant la valeur de $i, mais pour le second paramètre je n'arrive pas à avoir sa position dans cette chaine, comment faudrait-il faire ?

J'ai aussi un problème avec les valeurs dans la chaine égales à 0, mais je m'en occuperais plus tard.

Merci :P

Posté : 19 janv. 2006, 17:04
par Tictac
tu peux jeter un oeil =>

http://be2.php.net/in_array

tu comprendra p-e mieux !!

$array_s , c'est pas obligatoire , c'est juste pour faire un test si besoin !

par principe , je nomme tjs mes functions ;)

pour recupérer la position dans l'array , c'est simple

tu fais :

if (in_array($array2[$i],$array,true) == TRUE)
{
$cle .= "La clé ".$array2[$i]." existe déjà dans l'array !<br>";
$position = $i;
}
...

print $cle."=> en position ".$position." dans l'array";

Posté : 19 janv. 2006, 17:51
par spirou
Oui ça j'arrivais à le faire, ça me récupère la position de la 1ère valeur du double dans la chaine.

Je me suis peut-être mal expliqué, mais ce que je voudrais, c'est récupérer aussi la position de la 2nde valeur du double dans cette chaine.

Ok pour $array_s, je comprends mieux maintenant :D

Posté : 19 janv. 2006, 19:51
par Tictac
Voilà comment retourner toute le key ou se trouve la valeur en double =>
<?php

// Voici ton array 
$array = array("fleur","petale","tige","tige") ;
//combien de valeur dans l'array ? 
$nb_value = sizeof($array); 
//crée un deuxieme array pour les comparer ensuite 
$array2 = $array ; 
$cle = "";
$position = "";
//Boucle pour passer chaque valeur 
for ($i = 0 ; $i < $nb_value ; $i++) 
        { 
		//enlevons la première clé du $array 
		 $array_s = array_shift($array); 
         if (in_array($array2[$i],$array,true) == TRUE) 
                { 
                 $cle .=  "La clé ".$array2[$i]." existe déjà dans l'array !<br>";
				 $value = $array2[$i];
				 $position = array_keys($array2, $value);  
                } 
		 else{
		 	 }
        } 		
print $cle."<br>";
print_r ($position) ; 

?>
maintenat , tu as un array $position avec toutes les keys où se trouve les valeur en double !

Posté : 19 janv. 2006, 20:34
par spirou
Ca fonctionne impec.

Merci Tictac :D

Posté : 19 janv. 2006, 23:09
par Tictac
de rien ;)