Newsgroup: it.comp.www.php
Titolo: Ritornare un gande array

Ho la necessitï¿œ di creare un array che potrebbe contenere, in casi 
sporadici anche 200kb di testi. Questo array andrebbe creato in una 
funzione e ritornato.
Non sono pratico del parameter passing di php e quindi mi chiedevo se ci 
sono precauzioni da prendere per evitare di duplicare svariati kb...
Cioï¿œ, meglio
$var = generaarray();
oppure
$var = array() ;
generaarray( &$var );

 generaarray( &$var );
afaik dovrebbero essere uguali, con la prima l'array viene generato
nella funzione e il suo puntatore viene passato al chiamante.
Nella seconda versione prima "generi il puntatore" e poi lo passi alla
funzione, ma l'occupazione di memoria dovrebbe essere sempre la
stessa.
-- 
ValeRyo
XT600 "Katoki Pajama" - 
http://www.slimmit.com/go.asp?7Y9
CBR600F "Cerbero" - In vendita - 
http://www.slimmit.com/go.asp?7X0
GamerTag: 
http://card.mygamercard.net/IT/nxe/ValeRyo76.png
 

 funzione, ma l'occupazione di memoria dovrebbe essere sempre la stessa.
attenzione..
nel caso
[code]
$var = generaarray();
[/code]
non viene passata alcuna referenza, ma viene copiata la variabile..
per fare in modo che generaarray() ritorni una referenza bisogna scrivere 
la funzione nella forma
[code]
function &generaarray(...)
{
 ...
 return $array;
}
[/code]
nota l'& prima del nome della funzione..
-- 
www.iuz-lab.info

 non viene passata alcuna referenza, ma viene copiata la variabile..
Sei sicuro che il php generi una copia in memoria della zona in cui ci
sono gi� i dati, per poi distruggere subito dopo la copia 'inutile'?
E che quindi ci siano in memoria, in un dato momento del tempo,
due copie degli stessi dati?
Io avevo letto diversamente, ma se hai fonti migliori mi fido.


 
unset($nomevar) distruggi variabile e dati
in caso di un array lo svuoti con $vv = array()
200kb non sono nulla il problema si pone dai 500KB in su
function qualcosa(){
$dati[] = $pippo.....
// dipende dalla dimensione di cio cme metti in pippo
$pippo = "";
return $dati;


 Io avevo letto diversamente, ma se hai fonti migliori mi fido.
in questo caso non dovrebbe farlo.. ma senza il codice completo non sono 
in grado di dirlo..
in genere non si dovrebbero ritornare referenze per ottimizzare, poiche' 
il motore zend ottimizza gia' di suo secondo la regola del copy-on-write..
diciamo che la variabile non dovrebbe essere ne copiata ne referenziata 
ma solo spostata (riassegnata senza spreco di memoria)..
in passato aiutai qualcuno a riscrivere una funzione ricorsiva non banale 
(che il motore zend non era in grado di ottimizzare efficacemente) usando 
appunto il passaggio e il ritorno di referenze.. le prestazioni 
aumentarono di svariati punti percentuali..
bisogna vedere i casi (non credo sia il caso di FP)..
tuttavia i due modi di procedere descritti non sono uguali..
in altri linguaggi ci sono problemi simili e nella maggior parte dei casi 
si puo' tranquillamente trascurare le differenze tra due codici.. in 
questo caso del PHP le differenze sono anche molto meno importanti ed 
evidenti.. ma in alcune circostanze (non troppo banali) possono fare la 
differenza..
-- 
www.iuz-lab.info

 possono fare la differenza..
Ecco perch� ho chiesto l'ambito di applicazione, ma del resto se devi
preoccuparti di 200K in pi� o in meno non usi il php...


 tuttavia i due modi di procedere descritti non sono uguali..
Il mio caso è semplice. Mi hanno chiesto di sistemare un codice 
sviluppato non benissimo, tanto che le stesse righe di codice (query 
verso mysql e loop sui record con relativa visualizzazione) si ripetono 
alemno 12 volte in 5 file diversi.
Volevo quindi estrapolare questo pezzo di codice in una funzione che 
abbia in input i parametri della query e in output un array di valori, 
in stile MVC.
Il loop di visualizzazione verrebbe modificato per usare i dati 
nell'array...
In pratica il codice è così:
$risultato = array() ;
while($m = mysql_fetch_assoc($q))
{
         $titolo_news_link=genera_link( "XXX", $mailing["titolo"], 
$mailing["idart"] ) ;
         $risultato[] = array( "url" => $titolo_news_link,
                            "titolo" => $mailing["titolo"],
                                "id" => $mailing["idart"],
                            "orario" => date("H:i", $mailing["dp"]),
                              "data" => "[".date("d.m.Y H:i", 
$mailing['dp'] ) . "]",
                          "longdata" => $mailing['dp'] ,
                             "corpo" => $mailing["corpo"],
                          "cappello" => $mailing["corpo_home"],
                         "categoria" => $mailing['tc'] );
}
A questo punto devo tornare l'array $risultato.... (l'array lo faccio 
"hash" per non modificare il codice del loop di visualizzazione)
Per ora invece di una funzione faccio l'include del file con il codice 
dopo aver settato la variabile della query ma per poter riutilizzare il 
codice anche in altri punti dovrei trasformare tutto in una classe 
entrocontenuta...
Nel codice di Joomla ci sono moltissimi casi di variabili passate per 
referenza....

 referenza....
Non conosco gli internals di joomla, ma immagino che questa cosa
serva ai plugin che devono intervenire sugli stessi dati.
