Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 30

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306

    Contare quanti click ha fatto un indirizzo

    Ciao a tutti ragazzi
    sono diversi giorni che mi rompo la testa su questo esercizio.
    Non ce la faccio più spero in un vostro aiuto.

    Nel file test.txt ho una lista del genere

    codice:
    p1|26/07/16|127.0.0.1|12:40:17
    p2|26/07/16|127.0.0.1|12:40:19
    p2|26/07/16|127.0.0.1|12:40:21
    p2|26/07/16|127.0.0.1|12:40:22
    p1|26/07/16|127.0.0.1|12:40:24
    p2|26/07/16|127.0.0.1|12:30:18
    p1|26/07/16|188.114.103.34|12:30:21
    p1|26/07/16|173.245.56.233|12:30:23
    p2|26/07/16|173.245.54.238|12:30:25
    p1|26/07/16|188.114.103.34|12:33:23
    p1|26/07/16|188.114.103.34|12:33:26
    p2|26/07/16|188.114.103.34|12:33:28
    p1|26/07/16|188.114.103.34|12:51:24
    p2|27/07/16|173.245.56.233|06:00:37
    p2|27/07/16|173.245.54.238|06:00:37
    p1|27/07/16|173.245.63.234|06:00:38
    p1|27/07/16|173.245.54.234|06:00:38
    p2|03/08/16|173.245.54.238|06:01:51
    p1|03/08/16|173.245.54.234|06:01:51
    p2|03/08/16|173.245.56.233|06:02:26
    p1|03/08/16|173.245.63.234|06:02:27
    p2|03/08/16|162.158.104.227|13:15:08
    p1|03/08/16|162.158.104.227|13:28:53
    p1|06/08/16|127.0.0.1|12:36:42
    p2|06/08/16|127.0.0.1|12:36:47
    p2|09/08/16|127.0.0.1|15:16:11
    p1|09/08/16|127.0.0.1|15:17:52
    p2|09/08/16|127.0.0.1|15:18:19
    p1|09/08/16|127.0.0.1|15:18:21
    in cui p1 e p2 sono i tasti cliccati dagli utenti.
    Sono riuscito a calcolare il numero totale di click su p1 e su p2, ma voglio conoscere ogni indirizzo ip quanti click ha fatto su p1 e quanti su p2.

    Non so quale sia meglio come logica di pensiero e spero in un vostro aiuto in tal senso: ho iniziato con l'usare un semplice ciclo while per poter arrivare al risultato; poi mi è venuto in mente che potessi utilizzare anche una funzione che scorra anche lei il file test.txt. ma cmq non ci riesco.

    La cosa fondamentale che mi interesse è come devo muovere il cervello per tentare di risolvere problemi del genere e perchè.

    Questo è il mio codice:

    forse ci sono un po' troppi echo ma volevo rendermi conto



    codice:
    
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Conto il numero di click</title>
    </head>
    <body>
    
    
    <h3>Conto il numero di click</h3>
    
    
    <?php 
    $i=$nump1=$nump2='0';
    
    
    $indirizzo_pres=$indirizzo_pres2=$indirizzo_div=$totclicpres1=$totclicpres2=$totclicdiv1=$totclicdiv2='0';
    $indirizzop1='0';
    $indirizzop2='0';
    $indirizzo_trovato1=$indirizzo_trovato2='0';
    
    
    
    
    
    
    $textfile = fopen("test.txt", "r"); //apro il file da contare
    
    
    
    
    while ( $rigafile=fgets($textfile,1024) ) {
        $campiriga = explode("|", $rigafile); //estraggo tutti i campi di riga
        $click=$campiriga[0]; //prelevo da ogni riga il campo relativo al click
        $indirizzo1=$campiriga[2]; //prelevo da ogni riga il campo relativo all'indirizzo
    
    
        if(isset($indirizzo1)){  /*conteggio il numero di click totali sui due pulsanti*/
            if($click== "p1"){$nump1=$nump1+1; $i++;$indirizzop1=$indirizzo1;}
    
    
            if($click=="p2"){$nump2=$nump2+1;$i++;$indirizzop2=$indirizzo1;}
        }
        if($indirizzop1<>$indirizzop2){
            $indirizzo_trovato1=$indirizzop1;
            $indirizzo_trovato2=$indirizzop2;
        }
        quanti_click($indirizzo1,$indirizzop1,$indirizzop2);
    
    
    
    
    }//----------------chiudo while----------------------------------
    
    
    echo"<br>il numero di click totale su p1 è".$nump1 ;
    echo"\n<br>il numero di click totale su p2 è".$nump2;
    echo"<br>ccccccc$indirizzo_div<br>";
    echo"<br>$indirizzo1<br>";
    
    
    
    
    echo"<br>l'indirizzo  $indirizzo_pres ha fatto questi click sul primo $totclicpres1\n" ;
    echo"<br>l'indirizzo  $indirizzo_pres ha fatto questi click sul secondo $totclicpres2\n" ;
    
    
    echo"<br>l'indirizzo  $indirizzo_pres2 ha fatto questi click sul primo $totclicdiv1\n" ;
    echo"<br>l'indirizzo  $indirizzo_pres2 ha fatto questi click sul secondo $totclicdiv2\n" ;
    
    
    
    
    /*-----------------FUNZIONE----------------------------*/
    
    
    function quanti_click($indirizzo,$indirizzo_sceltap1,$indirizzo_sceltap2){
        
    global    $indirizzo_pres;    
    global    $indirizzo_pres2;    
    global    $totclicpres1;    
    global    $totclicpres2;
    global $totclicdiv1;
    global $totclicdiv2;
    global $indirizzo_div;
    $indirizzo_pres=$indirizzo_pres2=$indirizzo_div='0';
    $totclicpres1=$totclicpres2=$totclicdiv1=$totclicdiv2='0';
    
    
    
    
    
    
    
    
        $textfile = fopen("test.txt", "r"); //apro il file da contare
        
        
        while ( $rigafile=fgets($textfile,1024) ) {
            $campiriga = explode("|", $rigafile); //estraggo tutti i campi di riga
            $click=$campiriga[0]; //prelevo da ogni riga il campo relativo al click
            $ind=$campiriga[2]; //prelevo da ogni riga il campo relativo all'indirizzo
        
                if(($indirizzo_sceltap1==$ind)){
                    
                        if($click=="p1"){$totclicpres1=$totclicpres1+1;
                        $indirizzo_pres1=$indirizzo_sceltap2;}                    
                }else{
                    $totclicdiv1=$totclicdiv1+1;
                    $indirizzo_pres2=$indirizzo_sceltap2;
                }
        
            
                if($indirizzo_sceltap2==$ind){
                    
                    if($click=="p2"){$totclicdiv2=$totclicdiv2+1;
                    $indirizzo_pres=$indirizzo_sceltap2;
                    }
                    
                }    else{$totclicdiv2=$totclicdiv2+1;
                $indirizzo_pres2=$indirizzo_sceltap2;}
        
            
            
            
            
            
    
    
        }//----------------chiudo while----------------------------------
        
    }//chiudo funzione
    
    
    ?>
    
    
    </body>
    </html>



    La funzione quanti_click() aveva in precedenza anche quest'altra forma, ma cmq non dava i risultati sperati
    codice:
    function quanti_click($indirizzo){
    
    
    
    
        //definisco la variabili contatore
        
        global $totclicpres1;     //$totclicpres1='0';
        global $totclicpres2;    //$totclicpres2='0';
        
        global $totclicdiv1;     //$totclicdiv1='0';
        global $totclicdiv2;    //$totclicdiv2='0';
        global $indirizzo_pres2;
        global $indirizzo_pres3;
        
        
        global $indirizzo_pres;
        global $indirizzo_div;
        global $click;
        global $totclicdivvvv1;
        global $totclicdivvvv2;
        global $i;
        global $condizione1;
        
        $textfile = fopen("test.txt", "r");
        while ($rigafile=fgets($textfile,1024) ) {
                    
            $campiriga = explode("|", $rigafile);
            $ind=$campiriga[2];  //stesso indirizzo del while fuori funzione
        $i=0;
        
        
        if($indirizzo==$ind){$indirizzo_pres=$indirizzo;}
        if($indirizzo<>$ind){$indirizzo_pres2=$indirizzo;}
        
            if($indirizzo_pres){
                if($click=="p1"){$totclicpres1=$totclicpres1+1;}
                if($click=="p2"){$totclicpres2=$totclicpres2+1;}
                }
        
            if($indirizzo_pres2){
                if($click=="p1"){$totclicdiv1=$totclicdiv1+1;}
                if($click=="p2"){$totclicdiv2=$totclicdiv2+1;}            
            }
        }//chiudo while---------------------------------
        fclose($textfile);
        
    }//chiudo funzione--------------------------------------------------
    Ultima modifica di Alfoxx; 11-08-2016 a 17:00

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Io farei così
    Codice PHP:
    <?php
    // conterrà un elemento per ogni indirizzo che
    // ha cliccato sul pulsante p1
    $pulsante1 = array();

    // conterrà un elemento per ogni indirizzo che
    // ha cliccato sul pulsante p2
    $pulsante2 = array();

    // la variabile contenente il contatore del pulsante
    // la passo per riferimento, così la posso modificare
    // all'interno della funzione
    function quanti_click( &$pulsante$ip )
    {
        
    // se nell'array c'è già l'indirizzo dell'utente che sto considerando
        
    if ( array_key_exists($ip$pulsante) )
        {
            
    // aggiungo 1 click all'indirizzo
            
    $pulsante[$ip] += 1;
        }
        else
        {
            
    // altrimenti aggiungo un nuovo elemento all'array
            // la chiave dell'elemento è l'indirizzo
            // il valore è il numero di click
            
    $pulsante[$ip] = 1;
        }
    }
    ?>

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Conto il numero di click</title>
    </head>
    <body>

    <h3>Conto il numero di click</h3>

    <?php 

    $textfile 
    fopen("test.txt""r"); //apro il file da contare

    while ( $rigafile=fgets($textfile,1024) ) 
    {
        
    $campiriga explode("|"$rigafile); //estraggo tutti i campi di riga
        
        
    $pulsante $campiriga[0]; //pulsante premuto
        
    $indirizzo $campiriga[2]; //indirizzo dell'utente

        
    if ( $pulsante == 'p1' )
        {
            
    quanti_click$pulsante1$indirizzo );
        }
        else if ( 
    $pulsante == 'p2' )
        {
            
    quanti_click$pulsante2$indirizzo );
        }
    }

    foreach ( 
    $pulsante1 as $key => $value )
    {
        echo 
    "L'indirizzo $key ha cliccato $value volte sul pulsante 1<br>";
    }

    foreach ( 
    $pulsante2 as $key => $value )
    {
        echo 
    "L'indirizzo $key ha cliccato $value volte sul pulsante 2<br>";
    }
    ?>
    </body>
    </html>
    Ultima modifica di Alhazred; 11-08-2016 a 17:41

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    Grazie infinite per la tua tempestività....
    l'idea (sfruttare un array di appoggio per gli indirizzi) mi era venuta anche a me però non sapevo implementarla bene

    Ma non sono in grado di comprenderlo, mi spiego pr ora mi sono saltati queste tre cose all'occhio:

    - il passaggio per riferimento non l'ho affrontato nei miei corsi php.

    -questo comando array_key_exists($ip, $pulsante)
    è una funzione predefinita di php , giusto? cosa controlla ricevendo $ip e $pulsante? l'indirizzo ip ($ip) in base al pulsante cliccato ($pulsante)?

    quindi in definitiva controllo il primo campo sulla base del secondo campo di un array?

    - quando usi il ciclo foreach hai usato dopo as $key; cosa è questa $key? la puoi chiamare così all'improvviso?

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Quote Originariamente inviata da Alfoxx Visualizza il messaggio
    ...
    -questo comando array_key_exists($ip, $pulsante)
    è una funzione predefinita di php , giusto? cosa controlla ricevendo $ip e $pulsante? l'indirizzo ip ($ip) in base al pulsante cliccato ($pulsante)?

    quindi in definitiva controllo il primo campo sulla base del secondo campo di un array?
    Sì, è una funzione nativa di PHP: link
    Consulta sempre la documentazione quando incontri una funzione che non conosci, ci trovi tutte le informazioni.

    array_key_exists($ip, $pulsante)
    controlla se nell'array $pulsante (che in questo caso sarà $pulsante1 o $pulsante2 a seconda di quale gli viene passato dalla chiamata a quanti_click() ) c'è un indice uguale al contenuto di $ip, quindi se c'è un indice uguale all'indirizzo che si sta valutando.

    - quando usi il ciclo foreach hai usato dopo as $key; cosa è questa $key? la puoi chiamare così all'improvviso?
    foreach() può essere usato in due modi:

    1) foreach($array as $value)
    in questo caso si cicla sull'array $array e si prende il valore di ogni elemento, chiaramente $value puoi chiamarla come vuoi, anche $pippo o $xyz o qualsiasi nome valido

    2) foreach($array as $key => $value)
    in questo caso si prende in considerazione anche l'indice di ogni elemento durante il ciclo, l'indice dell'elemento corrente viene messo nella variabile $key, il valore nella variabile $value
    come per il primo caso per i nomi delle variabili puoi metterci quello che vuoi, solo il nome dell'array è vincolato all'array su cui vuoi ciclare, quindi anche
    foreach($array as $frittata => $ombrello)
    è valido, basta che ti ricordi tu cosa sia $frittata e cosa sia $ombrello
    Ultima modifica di Alhazred; 11-08-2016 a 23:57

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    Grazie infinite per le risposte

    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    S�, � una funzione nativa di PHP: link
    Consulta sempre la documentazione quando incontri una funzione che non conosci, ci trovi tutte le informazioni.

    array_key_exists($ip, $pulsante)
    controlla se nell'array $pulsante (che in questo caso sara $pulsante1 o $pulsante2 a seconda di quale gli viene passato dalla chiamata a quanti_click() ) è un indice uguale al contenuto di $ip, quindi se c'� un indice uguale all'indirizzo che si sta valutando.
    aiutandomi con il manuale mi sembra di capire che se l'indirizzo $ip e' settato (quindi e' presente/esiste gia') nel array $pulsante, mi da un risultato positivo, giusto?

    quindi nel comando array_key_exists () va prima cosa si vuole cercare nel array (nel nostro caso $ip) e poi l'array in cui cercare (nel nostro caso $pulsante)



    foreach() puo' essere usato in due modi:

    1) foreach($array as $value)
    in questo caso si cicla sull'array $array e si prende il valore di ogni elemento, chiaramente $value puoi chiamarla come vuoi, anche $pippo o $xyz o qualsiasi nome valido

    2) foreach($array as $key => $value)
    in questo caso si prende in considerazione anche l'indice di ogni elemento durante il ciclo, l'indice dell'elemento corrente viene messo nella variabile $key, il valore nella variabile $value
    come per il primo caso per i nomi delle variabili puoi metterci quello che vuoi, solo il nome dell'array � vincolato all'array su cui vuoi ciclare, quindi anche
    foreach($array as $frittata => $ombrello)
    � valido, basta che ti ricordi tu cosa sia $frittata e cosa sia $ombrello
    il foreach mi sembra molto strano come ciclo rispetto al while e al for.
    Da quello che ho capito, e' un ciclo che mi permette di scorrere gli elementi di un array associativo, quindi array che hanno come indice una stringa e non un numero.

    1) che vuol dire si prende il valore? cioe' si considera il valore di ogni elemento?

    se ho
    foreach($array as $value){
    echo "i valori sono $value";}

    visualizzo tutti i valori memorizzati nell'array?

    2)mi stai dicendo che con questa dicitura
    foreach($array as $key => $value)

    $key viene ad essere usato in questo istante per la prima volta e viene valorizzato per ogni ciclo con l'indice dell'array $array, mentre invece $value viene valorizzato per ogni ciclo con il valore



    Quote Originariamente inviata da semplice77 Visualizza il messaggio
    Infatti. Abbiamo a che fare con un esercizio scolastico che prevede la realizzazione di un semplice parser. Non è stato detto ma ritengo che l'esercizio sia finalizzato a prendere confidenza con l'uso delle stringhe e degli array in combinazione tra loro.
    hai centrato la finalità, anche se non immaginavo che dovessi usare gli array

    forse l'ultimo codice di Alhazred è quello risolutivo al momento, ma devo studiarlo meglio, però ho visto che non ha il passaggio per riferimento e mi pare più lineare al momento per me
    Ultima modifica di Alfoxx; 12-08-2016 a 10:54

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Quote Originariamente inviata da Alfoxx Visualizza il messaggio
    aiutandomi con il manuale mi sembra di capire che se l'indirizzo $ip e' settato (quindi e' presente/esiste gia') nel array $pulsante, mi da un risultato positivo, giusto?

    quindi nel comando array_key_exists () va prima cosa si vuole cercare nel array (nel nostro caso $ip) e poi l'array in cui cercare (nel nostro caso $pulsante)
    array_key_exists() funziona così: prende l'array che gli viene passato come secondo parametro (per noi $pulsante) e controlla per ogni elemento se il suo indice è uguale alla variabile che gli si passa come primo parametro (per noi $ip)

    quindi supponendo di avere
    $ip = '127.0.0.1';

    $pulsante = array( '192.168.1.1' => 3, '127.0.0.1' => 2 );
    quindi 2 elementi, uno con indice 192.168.1.1 e valore 3, l'altro con indice 127.0.0.1 e valore 2

    la funzione restituirà true, perché un elemento con indice 127.0.0.1 nell'array è presente, se non ci fosse restituirebbe false.


    il foreach mi sembra molto strano come ciclo rispetto al while e al for.
    Da quello che ho capito, e' un ciclo che mi permette di scorrere gli elementi di un array associativo, quindi array che hanno come indice una stringa e non un numero.
    foreach() lo puoi usare in ogni caso, con qualsiasi array.
    Codice PHP:
    // Avendo
    $array = array ( 'elemento 1''elemento 2''elemento 3' );

    // quindi un array non associativo, ma con indice numerico, puoi ancora fare
    foreach( $array as $key => $value )
    {
        echo 
    "Indice $key, valore $value<br>";
    }

    // che stamperebbe
    // Indice 0, valore elemento 1
    // Indice 1, valore elemento 2
    // Indice 2, valore elemento 3 
    Diversamente da for e while, per foreach non hai bisogno di sapere il numero di elementi presenti nell'array, con for ad esempio per scorrere tutto l'array dovresti fare

    for ( $i=0; $i < count($array); $i++ )

    quindi devi contare quanti elementi ha, foreach invece ci pensa da solo

    Inoltre foreach ti permette un accesso più comodo alle informazioni dell'array, sia all'indice che al valore.

    Comunque non ti preoccupare, i primi tempi foreach() sembrava strano anche a me, ma una volta che capisci come funziona non usi altro per ciclare sugli array.

    1) che vuol dire si prende il valore? cioe' si considera il valore di ogni elemento?

    se ho
    foreach($array as $value){
    echo "i valori sono $value";}

    visualizzo tutti i valori memorizzati nell'array?
    Esatto, foreach() cicla su tutto l'array, un elemento alla volta e ad ogni ciclo mette nella variabile $value il valore dell'elemento che sta esaminando durante quella iterazione.

    2)mi stai dicendo che con questa dicitura
    foreach($array as $key => $value)

    $key viene ad essere usato in questo istante per la prima volta e viene valorizzato per ogni ciclo con l'indice dell'array $array, mentre invece $value viene valorizzato per ogni ciclo con il valore
    Sì, anche $key cambia ad ogni iterazione del ciclo, come $value, solo che in $key ci sarà l'indice dell'elemento corrente, in $value ci sarà il suo valore.
    Con un esempio:
    Codice PHP:
    $array = array ( 'primo' => 'elemento 1''secondo' => 'elemento 2'=> 'elemento 3' );

    foreach(
    $array as $key => $value)
    {
        echo 
    "Indice $key, valore $value<br>";
    }

    // stamperà
    // Indice primo, valore elemento 1
    // Indice secondo, valore elemento 2
    // Indice 3, valore elemento 3 
    quindi:
    prima iterazione -> $key = 'primo', $value = 'elemento 1'
    seconda iterazione -> $key = 'secondo', $value = 'elemento 2'
    terza iterazione -> $key = 3, $value = 'elemento 3'

    forse l'ultimo codice di Alhazred è quello risolutivo al momento, ma devo studiarlo meglio, però ho visto che non ha il passaggio per riferimento e mi pare più lineare al momento per me
    Sì, ma se devi mostrarlo a scuola ad un professore non farlo, ci sono cose che sicuramente non vi ha spiegato, mi riferisco all'uso di "variable variable" ovvero variabili con nome variabile, se poi il professore fosse uno che apprezza lo spirito di iniziativa allora puoi provarci a portarglielo, poi però ci dici come è andata
    Ultima modifica di Alhazred; 12-08-2016 a 11:32

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    Grazie Alhazred, i tuoi esempi sono fondamentali per capire meglio...prendo carta e penna e ne riproduco alcuni




    Considerando uno dei codici che mi hai postato per esempio:

    codice:
    $array = array ( 'primo' => 'elemento 1', 'secondo' => 'elemento 2', 3 => 'elemento 3' );
    
    foreach($array as $key => $value)
    {
        echo "Indice $key, valore $value<br>";
    }
    
    // stamperà
    // Indice primo, valore elemento 1
    // Indice secondo, valore elemento 2
    // Indice 3, valore elemento 3 

    sia $key che $value non le inizializzi da nessuna parte. Li usi per la prima volta nel ciclo foreach



    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Sì, ma se devi mostrarlo a scuola ad un professore non farlo, ci sono cose che sicuramente non vi ha spiegato, mi riferisco all'uso di "variable variable" ovvero variabili con nome variabile, se poi il professore fosse uno che apprezza lo spirito di iniziativa allora puoi provarci a portarglielo, poi però ci dici come è andata
    variabile variabile ti riferisci a questo?
    se si, non ti preoccupare, l'avevo già vista questa cosa e quando l'ho scoperta mi aveva colpito tanto

    array_key_exists($ip, ${'pulsante_'.$cliccato}) ?
    ${
    'pulsante_'.$cliccato}[$ip] += 1 :
    ${
    'pulsante_'.$cliccato}[$ip] = 1;




    EDIT: Ma risolvere come stavo tentando io cioè con i confronti e le variabili d'appoggio non si può proprio?
    Ultima modifica di Alfoxx; 12-08-2016 a 12:14

  8. #8
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    puoi anche fare una cosa più compatta, usando l'operatore ternario

    Codice PHP:
    <?php

    $data 
    = array();

    $handle fopen("input.txt""r");

    while (
    $row fgets($handle)) {
        
    $fields explode("|"$row);
        
    $button $fields[0];
        
    $ip $fields[2];

        !
    array_key_exists($ip$data) ? $data[$ip][$button] = $data[$ip][$button] += 1;

    }

    foreach(
    $data as $ip => $values) {
        foreach (
    $values as $key => $value) {
            
    $sum[$key] += $value;
            echo 
    "$ip ha cliccato $value volte il tasto '$key' \n";
        }

    }

    echo 
    "Click totali:";
    foreach(
    $sum as $key => $value) {
        echo 
    "Click totali su '$key': $value \n";
        
    $totale += $value;
    }

    echo 
    "Totale click: $totale";

    echo 
    "\n";
    ?>

  9. #9
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Quote Originariamente inviata da clasku Visualizza il messaggio
    puoi anche fare una cosa più compatta, usando l'operatore ternario
    Dai, sta cercando di capire come funzionano le cose, meglio partire passo passo scrivendo anche più codice, ma rendendolo chiaro... altrimenti per compattezza ed efficienza
    Codice PHP:
    $pulsante_p1 = array();
    $pulsante_p2 = array();
    $totali 0;

    $textfile fopen("click.txt""r");

    while ( 
    $rigafile fgets($textfile) ) 
    {
        
    $totali++;
        
    $campiriga explode("|"$rigafile);
        
        
    $cliccato $campiriga[0];
        
    $ip $campiriga[2];

        
    array_key_exists($ip, ${'pulsante_'.$cliccato}) ? 
            ${
    'pulsante_'.$cliccato}[$ip] += 
            ${
    'pulsante_'.$cliccato}[$ip] = 1;
    }

    foreach ( 
    $pulsante_p1 as $key => $value )
    {
        echo 
    "L'indirizzo $key ha cliccato $value volte sul pulsante 1<br>";
    }

    foreach ( 
    $pulsante_p2 as $key => $value )
    {
        echo 
    "L'indirizzo $key ha cliccato $value volte sul pulsante 2<br>";
    }

    echo 
    "Click totali: $totali"
    Ho mantenuto i 2 array separati perché mantengono una complessità computazionale lineare invece che quadratica, l'array singolo essendo bidimensionale richiede 2 cicli annidati per essere scansionato, infatti hai dovuto usare 2 foreach() uno dentro l'altro, quindi complessità O(n^2), il mio codice ha complessità O(n)
    Ultima modifica di Alhazred; 12-08-2016 a 09:43

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    Ciao Clasku anche a te , infinite grazie.

    giustamente avendo molta più pratica e conoscendo più escamotage, avete entrambi utilizzato tecniche simili ma più elevate
    ovviamente cercherò di capire qualcosa in più, ma ci vuole tempo


    EDIT: pensandoci un po' su, ma esisterebbe anche un metodo senza usare l'array?
    o cmq vado a sbattere con qualcosa di irrisolvibile se non li uso?
    Ultima modifica di Alfoxx; 11-08-2016 a 19:23

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.