Page 1 sur 1

Retour de variable inefficace

Posté : 11 févr. 2007, 12:34
par orgerix
Bonjour,

J'ai codé une fonction permettant de détarminer si une donnée était présente plusieurs fois dans un tableau.
<?php
function verifnondouble($array)
{$i=0;
$j=0;
$max=count($array);
$message1="";
while ($i<$max)
	{$a=NULL;
	if ($array[$i]!="")
		{while ($j<$max AND $a==NULL)
			{if ($array[$i]==$array[$j])
				{$a="oui";
				$b=$array[$i];
				$message["$b"]="présent plusieurs fois<br>";
				}
			$j++;}}
	$i++;}
foreach($message as $key => $value)
	{$message1.="$key $value <br>";}
return ($message1);}
?>
J'ai un petit problème avec return($message1).

Si je teste $message1 à l'interieur de la fonction, elle existe. Par contre, à l'exterieur, non...

Posté : 11 févr. 2007, 13:26
par Truc
Salut,
Comment y fait tu appel à cette fonction ?
Et comment est-ce que tu récupères le message ?

Sinon méthode qui devrait fonctioner pour faire ce que tu veux :
appliquer array_unique() sur le tableau compter (count()) le nombre d'élements des deux tableaux s'il sont différent alors il y a au moins un élément qui se répète.
Ou meme un array_diff() :-k

Posté : 11 févr. 2007, 14:07
par Jules Petibidon
hello,

accessoirement, meme si c'est probablement pas ca qui te plante ta fonction, les parentheses sont déconseillées avec return.

accessoirement bis, les lignes coutent cher dans ton éditeur ou c'est par plaisir que tu rends ton code illisible ?

Posté : 11 févr. 2007, 19:53
par orgerix
Le tableau de valeur est obtenu à partir d'un formulaire, donc il aura toujours le même nombre d'indice. Cependant, on peut rentrer plusieurs fois la même valeur dans différents champs, ce que j'aimerai éviter.

Sionn, le fait de mettre un argument dans return ne fait pas qu'elle devient accessible par le script ayant appelé la fonction?

Voici les lignes de scripts faisant appel à la fonction :
verifnondouble($groupe);
print($message1);
PS Jules Petibidon, je ne vois pas pourquoi tu dis que mon code est illisible. pour moi il est parfaitement clair, mais c'est peut être parce que j'ai une logique différente...

Posté : 11 févr. 2007, 20:00
par Ajoloca
Bonjour,

Dans ton code $message1 est une variable locale à la fonction verifnondoublr(), ce qui veut dire que des que tu sorts de la fonction cette variable n'existe plus.

Pour pouvoir l'utiliser en dehors de la fonction, il faut la récupérer.
$message1 = verifnondouble($groupe);
print('***' . $message1 . '***<br />');

Posté : 11 févr. 2007, 20:01
par orgerix
OK, merci beaucoup...
Donc en gros, return($a) revoie la valeur et non la variable