Array taille limitée ? Comment l'augmenter?

Résolu/Fermé
jpaulweb - 23 oct. 2015 à 20:19
 jpaulweb - 26 oct. 2015 à 00:33
Bonjour,

J'utilise un tableau pour y placer des adresses mails et supprimer les doublons.
Cela fonctionne TB, mais je n'ai qu'un certain nombre d'adresses qui sont gardées (+ ou -250 sur 300) les autres ne sont pas dans la variable.
Voici le programme pour mettre les adresses dans la variable:
					/// Liste des mails
$lste_mail = array();
$mail1 = $donnees["Email_M"];
if (preg_match("!^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$!", $mail1) and $mail1_old != $mail1)
{$liste_mail[]= $mail1; $mail1_old = $mail1; $n2++;}
$mail2 = $donnees["Email_P"];
if (preg_match("!^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$!", $mail2) and $mail2_old != $mail2)
{$liste_mail[]= $mail2; $mail2_old = $mail2;$n2++;}
$mail_Ani = $donnees["Email_Ani"];
if (preg_match("!^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$!", $mail_Ani) and $mail_Ani_old != $mail_Ani)
{$liste_mail[]= $mail_Ani; $mail_Ani_old = $mail_Ani;$n2++;}

Et ici pour supprimer les doublons et les séparer par une virgule.

$nbre_mail = sizeof($liste_mail);
if ($nbre_mail>0)
{
$liste_mail = array_unique($liste_mail); //suppression des doublons
// Création de la variable $liste_mails
$nbre_mail = sizeof($liste_mail);
for($i=0; $i<$nbre_mail; $i++) {
if ($liste_mail[ $i ] != '') { $n++;
if ($liste_mails =='') $liste_mails = $liste_mail[ $i ];
else $liste_mails = $liste_mails.', '.$liste_mail[ $i ]; }}


Merci d'avance pour votre réponse.
JPAul

1 réponse

Utilisateur anonyme
24 oct. 2015 à 08:11
Voilà, lis attentivement et souhaite que ton problème soit résolu. À toi maintenant de faire le reste du boulot! $= Bon courage,

//Ici, tu avais tapé $lste_mail au lieu de $l[i]ste_mail,
//cette ligne était donc inutile puisque tu déclarais
//alors une variable qui n'étais jamais sollicitée.
//Assure-toi de bien réviser ton code! =#
$liste_mail = array();

//Maintenant, il n'y acucune limite à la taille d'un array
//sauf si un jour tu surpassais la quantité de mémoire allouée
//à l'éxécution de ton script. Tu ne l'atteindras JAMAIS,
//sauf si vraiment tu le faisais délibérément. Ce qui cause ton
//problème est alors une fuite (=p!). Ne serait-ce pas parce que
//tes expressions régulières rejettent les adresses avec majuscules?
//Ajoute un tout petit i à la fin de tes expressions pour les rendre
//insensibles à la casse, comme suit:
if(preg_match('!^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$!i', //...

//Ici, à défaut de compter le nombre de mail que tu as,
//la fonction is_array() fera le travail. Elle renvoie true
//si l'array contient une ou plusieurs valeurs.
if(is_array($liste_mail)){
	//suppression des doublons
	$liste_mail = array_unique($liste_mail);
	//Maintenant, il est absolument inutile de
	//compter à nouveau combien de valeurs contient
	//$liste_mail parce qu'il existe une fonction
	//qui se chargera de faire le travail.
	//Création de la variable $liste_mails
	$liste_mails = implode(', ', $liste_mail);
	}

//Et je me permet le commentaire! ;) - Évite surtout 
//d'utiliser des noms de variable qui portent à confusion. 
//$liste_mail et $liste_mails sont très très semblables si 
//on ne porte pas suffisament attention!
1
Merci beaucoup pour ta réponse!
J'ai corrigé mes erreurs et essayé...
J'ai du rajouter des crochets à la déclaration de variable array.
$liste_mail[] = array(); sinon il ne gardait qu'une adresse mail.
pour compter le nombre d'éléments. is_array($liste_mail) me donne toujours 1.
J'ai donc repris : sizeof($liste_mail);
Voilà tout fonctionne, il n'y a donc pas de limite d'éléments pour array sauf s'il elle n'est pas déclarée...
Encore merci
JPAul
0
Utilisateur anonyme
25 oct. 2015 à 22:29
is_array retourne un booléen, soit 1 pour TRUE ou 0 pour FALSE. Si tu as vraiment à compter et à utiliser le nombre d'éléments que contient le tableau, vas-y avec sizeof() - quoique la tendance se veut d'utiliser count() dont le résultat est le même. Maintenant, n'oublie pas: il n'y a pas de limite d'éléments dans un array, qu'il soit déclaré ou non! Bon courage, =)
0
Merci!
mais pour ce qui est de la déclaration d'array, c'est bizarre, car quand je l'avais mal déclarée, cela ne me gardait que 255 mails (environs)...
0
Utilisateur anonyme
25 oct. 2015 à 23:14
as-tu changé l'expression régulière du preg_match?
0
Non, je n'ai rien changé, mais ça fonctionne...
Encore merci
0