IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] Taille maximale d'un tableau


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur Informatique
    Inscrit en
    Décembre 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur Informatique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 146
    Points : 158
    Points
    158
    Par défaut [Tableaux] Taille maximale d'un tableau
    Bonjour à tous et à toutes.

    Je me lance dans un petit défis. Mais je me suis retrouvé avec un petit soucis.
    J'ai tableau qui est initialisé à partir d'une de donnée que j'ai en base de donnée. Il y a un peu moins de 1000 elements mais à partir du 473 il plante dans l'affectation. Pourquoi pas avant ou aprés, mystere .

    voici mon code d'affectation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    		$pair = 0;
    		$impaire = 0;
    		$compteur = 0;
    		$saveY = 0;
    		foreach($listeTerrain as $k => $v) {
     
    			if($v->getVar('pos_y') %2 == 0) {
    				$positions[$compteur]['pos_x'] = $v->getVar('pos_x')*$this->resolution->getVar('largeur_sprite');
    				$positions[$compteur]['pos_y'] = $pair*$this->resolution->getVar('hauteur_sprite');
    				$positions[$compteur]['url_img']= XOOPS_URL.'/modules/'.$xoopsModule->getVar('dirname').'/uploads/terrain/res_'.$this->resolution->getVar('nom').'/'.$v->getVar('chemin_img');
    				$positions[$compteur]['nom_div']= "pos_".$v->getVar('pos_x')."_".$v->getVar('pos_y');
     
    			}
    			else {
    				$positions[$compteur]['pos_x'] = $v->getVar('pos_x')*$this->resolution->getVar('largeur_sprite')+floor($this->resolution->getVar('largeur_sprite')/2);
    				$positions[$compteur]['pos_y'] = $impaire*$this->resolution->getVar('hauteur_sprite')+floor($this->resolution->getVar('hauteur_sprite')/2);
    				$positions[$compteur]['url_img']= XOOPS_URL.'/modules/'.$xoopsModule->getVar('dirname').'/uploads/terrain/res_'.$this->resolution->getVar('nom').'/'.$v->getVar('chemin_img');
    				$positions[$compteur]['nom_div']= "pos_".$v->getVar('pos_x')."_".$v->getVar('pos_y');
     
    			}
    if($v->getVar('id_arph_terrain') == 473) {
    				echo "test";
    				die;
    				}
     
    			if($saveY != $v->getVar('pos_y')){
    				$saveY = $v->getVar('pos_y');
    				if($saveY %2 == 0)
    					$pair++;
    				else
    					$impaire++;
    			}
    			$compteur++;
    		}
    listeTerrain pour information afin que vous compreniez un peu comme ça fonctionne est un tableau contenant des objets dit terrain. Et donc cet objet contient l'equivalent d'un enregistrement en base de données. J'utilise cette méthode pour d'autre chose et utilise cette table aileurs sans souci. Je ne comprends pas pourquoi lorsque je désire affecter ce tableau cela ne fonctionne pas. J'en ai besoin pour l'affecter à un templates .

    ps le test avec la valeur 473. Je l'ai fait à l'entrée de la boucle il affiche test.
    Et la ou il est écrit, j'obtiens une page blanche. Comme si il php avait perdu les pédales :s avec une valeur en trop en mémoire :s

    Enfin bref. Si vous aviez une idée .

    merci d'avance.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if($v->getVar('id_arph_terrain') == 473) {
    				echo "test";
    				die;
    				}
    die -- Alias de la fonction exit()
    exit() termine l'exécution du script courant. Elle n'a pas de valeur de retour (et pour cause !), mais elle utilisera le message status comme message de fin d'exécution.

  3. #3
    Membre averti Avatar de nicocsgamer
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 321
    Points : 342
    Points
    342
    Par défaut
    En effet il n'y a aucune erreur. Ton script est arreté à la valeur 473 par la fonction die().

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur Informatique
    Inscrit en
    Décembre 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur Informatique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 146
    Points : 158
    Points
    158
    Par défaut
    Oui sauf que j'ai pas le message test.... tout le problème est la!
    Lorsque je le met AVANT le tour de boucle 473 il s'affiche.
    Lorsque je le met APRES le tour de boucle 473 il ne s'affiche pas.
    Ce qui semble montré qu'il y a un problème lors de l'insertion de l'enregistrement 473 dans mon tableau!

    Car si je ne met pas de exit... ma page est vide!

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur Informatique
    Inscrit en
    Décembre 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur Informatique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 146
    Points : 158
    Points
    158
    Par défaut
    Alors aprés quelque tests j'ai vu que c'était lors de la construction d'un tableau que cela échouait. De plus le fait de mettre @ devant mysql_fetch_array m'affecte une ligne en moins... avant de planter.
    Ce comportement me prend le choux!

    J'ai mis à jour avec wamp 1.7.2 avant j'était avec 1.7.0 et j'ai 10 tour de boucle de plus avant le plantage. C'est vraiment n'importe quoi.
    Voici l'endroit exact ou cela merdouille:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    		$result = $this->db->query($sql, $limit, $start);
    		if (!$result) {
    			return $ret;
    		}
     
    		$compteur = 0;
    		while ($myrow = mysql_fetch_array($result)) {
    			if($compteur==832)
    			{
    				echo "test";
    				die;
    			}
    			$arph_terrain = new arph_terrain();
    			$arph_terrain->assignVars($myrow);
    			if (!$id_as_key) {
    				$ret[$compteur++] =& $arph_terrain;
    			} else {
    				$ret[$myrow['id_arph_terrain']] =& $arph_terrain;
    			}
    			unset($arph_terrain);
    		}
    		return $ret;
    Donc lorsque j'arrive au tour 832 j'ai bien l'affichage test. Mais si fais le test sur le tour 833. Je n'ai plus d'affichage. Alors que j'ai ensuite lors du retour un affichage de certaine valeur. Donc J'ai meme mi un echo à un moment donné aprés la boucle pour être sur qu'il y parvenais...
    Mais niet pour cela que j'ai mis le echo avec le test afin de tenter à quel affectation (tour de boucle cela plantait... mais cela ne m'avance pas beaucoup à vrai dire.)

    Tout ce que j'ai l'impression c'est qu'il y a un problème de communication entre php et mysql. J'obtiens bien un résultat de 950 ligne sous mysql.
    Mais depuis le php affecter ces 950 enregistrement dans un tableau plante...
    Ca m'échappe.

    Si vous avez une idée?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Points : 461
    Points
    461
    Par défaut
    Par curiosité, quelle est la valeur de $n quant tu exécutes simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $n = 0;
    while ($resultat[$n] = mysql_fetch_array($result)) 
          $n++;
    Petite suggestion liée à l'allocation mémoire : sors la déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $arph_terrain = new arph_terrain();
    ainsi que
    de ta boucle while. Tu peux créer une fonction raz() de ta classe arph_terrain afin de remettre à 0 tes variables.
    Désolé de ne pas pouvoir t'aider plus que ça!

  7. #7
    Membre habitué
    Homme Profil pro
    Ingénieur Informatique
    Inscrit en
    Décembre 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur Informatique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 146
    Points : 158
    Points
    158
    Par défaut
    Et bien merci beaucoup tu as tapé dans le mile.
    Je n'avais pas penser à ton premier test. Ainsi j'aurais eu la puce à l'oreille directement .

    Bref, j'ai interret à me méfier avec la création des objets en grande quantité ^^. Le pire j'y suis habitué au boulot... La c'est pour un développement perso. no comment

    en tout cas je vais pouvoir continuer à présent :p.

    EDIT:
    Je me suis avancé un peu vite... Je me retrouve que la méthode raz marche trop bien ^^.
    je n'arrive plus à réassigner mes valeurs . J'enquête et je tiens au courant

    En fait en réfléchissant. Je pense que toutes les cases font reference au même objet arph_terrain. J'ai enlever le &. Mais cela ne change rien, je n'ai pas de copie de l'objet dans le tableau

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur Informatique
    Inscrit en
    Décembre 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur Informatique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 146
    Points : 158
    Points
    158
    Par défaut
    J'ai trouvé il fallait que je donne plus de mémoire au script php par le parametre dans php.ini memory_limit j'ai augménter la valeur par défaut et cela fonctionne

    Merci encore pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. LV 2011 : taille maximale d'un tableau 1D
    Par sooyung dans le forum LabVIEW
    Réponses: 1
    Dernier message: 09/06/2015, 22h50
  2. Taille maximale d'un tableau de char
    Par ickis69 dans le forum Débuter
    Réponses: 33
    Dernier message: 06/04/2012, 11h38
  3. [XHTML 1.0] Taille maximale d'un tableau
    Par ne2sbeal dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 05/03/2010, 12h23
  4. [Tableaux] Taille maximale d'un tableau
    Par Bisûnûrs dans le forum Langage
    Réponses: 3
    Dernier message: 15/02/2007, 19h53
  5. [langage] taille maximale d'un tableau ?
    Par Jasmine80 dans le forum Langage
    Réponses: 10
    Dernier message: 10/11/2006, 10h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo