Retour de variable inefficace

Mammouth du PHP | 693 Messages

11 févr. 2007, 12:34

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...

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

11 févr. 2007, 13:26

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 259 Messages

11 févr. 2007, 14:07

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 ?

Mammouth du PHP | 693 Messages

11 févr. 2007, 19:53

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...
Modifié en dernier par orgerix le 11 févr. 2007, 20:00, modifié 1 fois.

ViPHP
ViPHP | 1961 Messages

11 févr. 2007, 20:00

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 />');
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 693 Messages

11 févr. 2007, 20:01

OK, merci beaucoup...
Donc en gros, return($a) revoie la valeur et non la variable