Array taille limitée ? Comment l'augmenter?

Résolu
jpaulweb -  
 jpaulweb -
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

  1. Utilisateur anonyme
     
    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
    1. jpaulweb
       
      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
    2. Utilisateur anonyme
       
      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
    3. jpaulweb
       
      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
    4. Utilisateur anonyme
       
      as-tu changé l'expression régulière du preg_match?
      0
    5. jpaulweb
       
      Non, je n'ai rien changé, mais ça fonctionne...
      Encore merci
      0