2 domande su codice

ho questo codice

for($x=0;$x<$righeRagruppata;$x++)
{
   $riga = explode(",",$venditaRagruppata[$x]);
   $riga[2] = ""; 
   $riga[3] = "";
   $riga[4] = "";
   /*echo $riga[0];
   echo $riga[1];
   echo $riga[2];
   echo $riga[3];
   echo $riga[4];*/
   
   $matrice[$x] = implode(",",$riga);
   echo $matrice[$x];
}

dove venditaRagruppata è un array che ha in ongi sua cella una stringa composta da "filiale,prodotto" e io voglio mettere il tutto dentro un'altro array

ora non so xkè ma se lo lascio così quello che mi visualizza è solo una parte dell'array...com se a un certo punto si troncasse xkè finisce con il prodotto scritto a metà se invece insierisco la parte commentata allora echo $matrice[$x] mi fa vedere tutto l'array...non capisco

seconda domanda

for ($i=0;$i<$righeRipulita;$i++)
{ 
    $riga2 = explode(",",$venditaRipulita[$i]);
    for($j=0;$j<$righeRagruppata;$j++)
    {
      $riga3 = explode(",",$matrice[$j]);//ho messo matrice al posto di venditaragruppata
       if($riga2[0]=$riga3[0]) 
       {
           if($riga2[1]=$riga3[1])
           {
            if($riga2[3]=="2005")
             {
               $riga3[2] = $riga2[2]; 
            }else 
            if($riga2[3]=="2006")
            {
               $riga3[3] = $riga2[2];
            }else
            if($riga2[3]=="2007")
            {
               $riga3[4] = $riga2[2];
            }
         }
         
      }
      $matrice[$j] = implode(",",$riga3); //coime sopra
      echo $matrice; // come sopra
   }
    
   
}

questo codice non mi stampa nulla anzi dopo un po che carica si ferma ma rimane aperta la finestra del prompt del php  ???

inviato 10 anni fa
Mandalayawantico
X 0 X

allora per la prima domanda ho risolto la seconda invece mi da ancora problemi semplifico un po

for ($i=0;$i<1300;$i++)
{ 
    for($j=0;$j<1300;$j++)
    {
       echo $miaTabella[$j]  //è un array con 1300 elementi
   }
   
}/*

se faccio eseguire questo codice comincia a caricare ma non finisce + e rimane aperta la finestra php.exe

a questo punto penso che dipenda dal fatto che deve fare troppe operazioni dato che esegue un for dentro un for quindi 1300 * 1300 =  1.690.000 operazioni, o sbaglio? non c'è un modo per aggirare il problema?

risposto 10 anni fa
Mandalayawantico
X 0 X

abilitare la visualizzazione degli errori (oppure guardare nel log). Se si blocca a causa del tempo eccessivo che ci mette ad iterare ti visualizzerà il rispettivo messaggio. In questo caso l'unica cosa da fare è cambiare il max_execution_time direttamente nel php.ini oppue tramite la funzione set_time_limit (http://ch2.php.net/set_time_limit), ma solamente se safe_mode è su off.

risposto 10 anni fa
GaretJax
X 0 X

no non si blocca e non mi da errore...sta li a acaricare senza fine ho aspettato anche una decina di minuti

risposto 10 anni fa
Mandalayawantico
X 0 X

prova a mettere echo $i*1300 + $j; al posto di echo $miatabella[$j]; e vedere cosa succede...

risposto 10 anni fa
GaretJax
X 0 X

ho provato...succede la stessa cosa

...ah cmq...buona pasqua

risposto 10 anni fa
Mandalayawantico
X 0 X

e non vedi niente come output?

risposto 10 anni fa
GaretJax
X 0 X

niente

risposto 10 anni fa
Mandalayawantico
X 0 X

potrebbe essere un problema di configurazione del php.ini?   :-\

risposto 10 anni fa
Mandalayawantico
X 0 X

come ho già ripetuto diverse volte, error reporting al massimo e la visualizzazione degli errori (in fase di sviluppo) attiva.. prova a cambiare le due impostazioni ;)

risposto 10 anni fa
GaretJax
X 0 X

io error reportingo cel'ho settato a E_ALL & ~E_NOTICE cmq ho provato a lasciare solo E_ALL e non cambia niente

non mi da errori continua a caricare come se non avesse ancora finito

risposto 10 anni fa
Mandalayawantico
X 0 X

ho risolto (diciamo) eliminando gli echo xkè a quanto ho capito sono quelli che creano il problema

invece questo non riesco a capirlo mi dovrebbe stampare "ciao" ogni volta che $riga2[0]==$riga3[1] ma invece non stampa niente

ho provato a controllare $riga2[0] e $riga3[1] e sono uguali inoltre ho provato ad aggiungere il punto esclamativo nella clausola dell'if ma non stampa niente lo stesso(cioè questo non dovrebbe essere possibile visto che o sono uguali oppure non lo sono)

questo è il codice:

for($i=0;$i<$righeRipulita;$i++)
{ 
    $riga2 = explode(",",$venditaRipulita[$i]);
   for($j=0;$j<10;$j++)
    {
      $riga3 = explode(",",$matrice[$j]);
      if($riga2[0]==$riga3[1]) 
       {
           echo "ciao";
      }
   }
   
}
risposto 10 anni fa
Mandalayawantico
X 0 X

hai un qualche ouptu buffering attivo nello stack?

Prova a fare un flush di tutto, come nell'esempio della pagina del manuale: http://ch2.php.net/manual/en/function.ob-end-flush.php

risposto 10 anni fa
GaretJax
X 0 X

Anche a me era venuto in mente, ma poi mi è sembrata una stupidata in fondo devi farlo partire con ob_start e non ricordartelo.

risposto 10 anni fa
LonelyWolf
X 0 X

credo che il problema sia dato dal fatto che gli array riga2 e riga3 li creo prendendo i dati da 2 file .csv perchè ho semplicemente cambiato la posizione delle colonne all'interno del file .csv e ora riga2[0] e riga3[1] risultano uguali

invece se provo a fare questo if

if($riga2[3]=="\"2007\"")
            {
                echo "ciao";
            }

non mi da output eppure riga2[3] è uguale a "2007" virgolette comprese

ma stranamente se gli faccio fare il conteggio dei caratteri con la funzione strlen(riga2[3]) mi da 8 e non 6 come dovrebbe essere per cui penso potrebbe essere colpa del formato csv

che dici?

alla tua domanda non so rispondere xkè non so cosa sia un output buffering  ???

risposto 10 anni fa
Mandalayawantico
X 0 X

tutto risolto

ancora però non sono riuscito a capire se e come sia possibile evitare che php si impalli quando le operazioni sono tante

risposto 10 anni fa
Mandalayawantico
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda