Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    PHP performance foreach: migliorabili?

    Ciao a tutti sto riscontrando problemi di performance per quanto riguarda uno script php che sto costruendo.

    All'interno dello script ci sono alcuni cicli (for e foreach) che devono essere utilizzati per scorrere delle strutture array(anche multidimensionali)

    Gli array sono calcolati a priori e salvati all'interno di una classe. Quindi utilizzo dei foreach innestati per scorrerli e preparare le mie form html piu o meno complesse.

    Stavo leggendo su internet che i foreach sono lenti ma piu facili da utilizzare con gli array.

    C'è modo di ottimizzarli?

    per esempio io li uso cosi:



    Vi ringrazio
    codice:
    foreach($this->data_tables_components[$curr_data_table["id_data_table"]] as $curr_data_table_component){
     ....  
    }

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505

    Re: PHP performance foreach: migliorabili?

    Quello lì non è solo il modo giusto, ma è l'unico modo di usare un foreach().

    Se lo script è lento è perché gli array sono grandi e ci sono molti foreach annidati (non si dice innestati).
    Annidando cicli for, while o foreach la complessità computazionale (tempo di esecuzione) dello script aumenta esponenzialmente.

    Molto brutamlmente:
    se hai un array di n elementi, per scorrerlo ci metti x secondi
    se hai 2 array annidati di n elementi, per scorrerli tutti e 2 ci metti x^2 secondi perché per ogni elemento del primo array, devi scorrere tutto il secondo.

    Se il tempo che il tuo script impiega non è accettabile non ti resta che pensare un algoritmo diverso che ti permetta di limitare il grado di annidamento degli array, oppure se in determinate condizioni è inutile continuare a scorrere un array, mettici un break che interrompa il ciclo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.