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 9 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 9 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 9 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 9 anni fa
Mandalayawantico
X 0 X

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

risposto 9 anni fa
GaretJax
X 0 X

ho provato...succede la stessa cosa

...ah cmq...buona pasqua

risposto 9 anni fa
Mandalayawantico
X 0 X

e non vedi niente come output?

risposto 9 anni fa
GaretJax
X 0 X

niente

risposto 9 anni fa
Mandalayawantico
X 0 X

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

risposto 9 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 9 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 9 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 9 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 9 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 9 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 9 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 9 anni fa
Mandalayawantico
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda