Newsgroup: it.comp.www.php
Titolo: Maximum execution...

L'elaborazione di una pagina php non si conclude entro i canonici 30 secondi 
e dunque mi viene restituito il seguente errore:
Fatal error: Maximum execution time of 30 seconds exceeded in 
/rootdomain/it/s/a/s............................
Supponendo che il mio codice sia scritto nella maniera migliore...C'č un 
modo per bypassare il problema? 

 per bypassare il problema?
Esiste set_time_limit(0), ma alcuni provider potrebbero inibirlo
-- 
Lello vitello cantautore alla bona
www.lellovitello.it

 Esiste set_time_limit(0), ma alcuni provider potrebbero inibirlo
---------
Infatti:
Warning: set_time_limit() [function.set-time-limit]: Cannot set time limit 
in safe mode in /rootdomain
Vediamo un po' se possiamo risolvere diversamente.
Il tempo maggiore lo spreco per ordinare un array.
Ho questo array:
$mioarray[10][90][90] che contiene numeri compresi tra 0 e 4000.
esiste un modo per otterere un altro array ordinato in ordine decrescente? 

 esiste un modo per otterere un altro array ordinato in ordine decrescente? 
Hai provato con arsort()? Cmq sia ordinare tutti quei numeri è 
sicuramente un'operazione dispendiosa... dubito che ci riesca in meno di 
30 secondi.

 esiste un modo per otterere un altro array ordinato in ordine decrescente? 
Uno dei sistemi per ovviare al problema del timeout è quello di salvare 
i dati su DB.
Ho letto il tuo codice, ma ci sono troppe variabili che non mi sono 
note, troppe costanti non spiegate, faccio fatica ad ottimizzarlo senza 
sapere il contesto.
Quindi, prova a pensare se sia il caso di trasferire tutto il contenuto 
del file su DB e poi sfruttare la velocità di ORDER BY per fare il tuo 
lavoro.
Secondo consiglio: prova ad usare un altro sistema per memorizzare i dati:
Fatti un array ad una dimensione così:
per la ruota di Milano:
milano[1] = 13; //indica che sulla ruota di milano il numero 1 è uscito 
13 volte
milano[2] = 34; //hai capito, no?
In questo modo hai l'informazione di frequenza.
Per il ritardatario invece puoi, mano a mano che parsi le estrazioni, 
inserire in un array di 90 elementi le varie estrazioni:
Immagina di avere questa serie di estrazioni:
a) MILANO (4, 5, 6, 7, 8)
b) MILANO (4, 5, 3, 2, 1)
c) MILANO (5, 6, 7, 8, 9)
memorizza questa struttura:
a) ritard_milano[4] = 1; ritard_milano[5] = 2; ritard_milano[6]=3; 
ritard_milano[7]=4; ritard_milano[8]=5
b) ritard_milano[4] = 6; ritard_milano[5] = 7; ritard_milano[3] = 8; 
ritard_milano[2] = 9; ritard_milano[1] = 10
c) e cos+ via..
alla fine hai un array ritard_milano[] di novanta elementi che ordini in 
qualche millisecondo e ti da il ritardatario (quello con il contenuto 
più basso su quella ruota)
Pensi che possa andare bene??
Ciao!
SirG

 basso su quella ruota)
Il problema č che non si tratta del ritardo di un numero singolo ma di un 
ambo.
Cioč... non mi interessa il ritardo del numero 17 (ad esempio) ma dell'ambo 
17.56
Ecco perché ho bisogno di un array a tre 
dimensioni(ruota-elemento1-elemento2)
Ciao 

ho, in parte, risolto il mio problema di ordinare un array 
multidimensionale.
Ecco come ho fatto:
per identificare il ritardo dell'ambo 01.02
invece di creare un array del tipo $mio_array[01][02]
prima ho creato una chiave
$chiave=Elemento1 . Elemento2 che nel caso specifico mi dà "0102"
poi ho creato un array ad una dimensione:
$mio_array["0102"]=$valore
poi ordino il tutto con arsort()
però.....
ecco come è ordinato il mio array:
Array
(
    [0258] => 3594
    [3541] => 3123
    [0446] => 3081
    [3871] => 2931
    [0221] => 2753
    [3955] => 2619
    [1290] => 2594
io vorrei ricavare il valore tra le parentesi e visualizzarlo formattandolo 
a modo mio 

 a modo mio 
while (list($chiave, $valore) = each($mio_array))
{
    echo "Chiave: " . $chiave . " - valore chiave: " . $valore . "\n";
}
Così ti elenca le "chiavi" ed il loro valore. Puoi formattarle come ti 
pare...

 pare...
****
Grazie!
Ho risolto cosě:
foreach($TabAmbi_ba as $valore)
{
$ele1 = substr(key($TabAmbi_ba),0,2);
$ele2 = substr(key($TabAmbi_ba),2,2);
if($conteggio_ba<10) // mi interessano soltanto i primi 10
{
$conteggio_ba++;
$s_ba.=$ele1 . "-" . $ele2 . "  " . $TabAmbi_ba[key($TabAmbi_ba)] . "<br>";
}
next($TabAmbi_ba);
}
a questo punto ottengo ad esempio
17.56 3820
+ le altre 9 righe