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 :

Optimisation d'une fonction retournant plusieurs résultats.


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 117
    Points : 67
    Points
    67
    Par défaut Optimisation d'une fonction retournant plusieurs résultats.
    Bonsoir,

    Voilà j'aimerais optimiser une fonction sensée retourner plusieurs .. éléments.

    Voici donc la fonction un peu découpée car elle est assez longue et imbuvable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function get_new_elements($old_f, $new_f, $hash_row) {
    	$new_inventory = array();
    	$new_items = array();
    [...]	
    	while (($line = fgetcsv($handle, 10000, ";")) !== FALSE) {
    [...]
    			array_push($new_items, array ($row + 1, $line)); 				
    [...]
    			array_push($new_inventory, array($row + 1, $line));			
    	}
    [...]
    	return array($new_inventory, $new_items);
    }
    Au final je stocke le résultat de la fonction dans une variable intermédiaire de laquelle j'extrais les deux tableaux.
    Du coup je double l'utilisation des ressources vu qu'il fait des copies à gogo...

    Et j'ai un peu la trouille de dépasser la limite d'utilisation de la mémoire vive sur le serveur, car la taille de mes tableaux se mesurent en méga-octet et cette fonction est appelé dans une boucle ...

    Alors voilà mes connaissances en php sont assez faible et je ne connais pas d'alternative à ce que je vous ai montré.
    Il y'a les variables globales mais j'ai toujours appris que c'était le mal absolu et qu'en se détournant de cette voie on aspirait à un avenir meilleur (et moi j'y tiens à mon karma !).

    Je vais donc conclure sur ma question : Existe t'il de meilleur méthode applicable dans ce cas pour retourner plusieurs gros "éléments" depuis une même fonction ?

    Merci d'avance !

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux construire directement ton tableau de retour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $retour = array('new_items'=>array(), 'new_inventory'=>array()):
    while (($line = fgetcsv($handle, 10000, ";")) !== FALSE) {
     
    			$retour['new_items'][] = array($row + 1, $line);
    		        $retour['new_inventory'][] = array($row + 1, $line);			
    	}
     
    return $retour;
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Si la quantité de donnée risque de causer un problème, alors une solution serait de ne pas stocker l'intégralité les données à chaque boucle, mais les exécuter (en quelque sorte) immédiatement.

    Pour exécuter, j'entends par là que le but de ces traitement sont surement pour, soit afficher le contenu (html, pdf, etc ...), soit pour les enregistrer/mettre à jour (Bdd, pdf, xml, etc ...).

    En somme, y faire ce qui doit être fait au plus tôt, ce qui libèrera la mémoire à chaque boucle, théoriquement.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 117
    Points : 67
    Points
    67
    Par défaut
    Bonjour.

    Merci pour vos réponses !

    J'ai finalement adopté ta méthode runephp en évitant de stoker trop de données dans des variables temporaires.

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

Discussions similaires

  1. [XL-2003] Optimisation d'une fonction à plusieurs variables
    Par kokoVBA dans le forum Macros et VBA Excel
    Réponses: 45
    Dernier message: 06/05/2009, 10h38
  2. Fonction retournent plusieurs valeurs
    Par Futixu dans le forum C++
    Réponses: 18
    Dernier message: 15/06/2006, 22h49
  3. Fonction retournant plusieurs valeurs
    Par Trap D dans le forum Scheme
    Réponses: 1
    Dernier message: 17/02/2006, 21h52
  4. Savoir si une requête retourne un résultat ou pas
    Par zut94 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/09/2005, 15h48
  5. Une fonction peut-elle retourner plusieurs résultats ?
    Par aragorns dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 26/03/2005, 22h18

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