Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 30
  1. #11
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    112
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Sì, con un database sarebbe molto più semplice, ma a disposizione ha un file di testo.
    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.

  2. #12
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    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

  3. #13
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    ^^^
    infatti lo scopo era quello di mostrargli un modo diverso per risolvere il problema, poi che didatticamente sia meglio essere prolissi nel codice non ci sono dubbi

  4. #14
    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

  5. #15
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    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

  6. #16
    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

  7. #17
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Quote Originariamente inviata da Alfoxx Visualizza il messaggio
    sia $key che $value non le inizializzi da nessuna parte. Li usi per la prima volta nel ciclo foreach
    Esatto, ci pensa foreach() a valorizzarle.
    In generale in PHP non c'è bisogno di dichiarare le variabili prima di usarle, solo nei casi in cui si deve sapere il valore che ha una variabile è necessario che sia inizializzata da qualche parte, per esempio se fai

    $var1 = $var2 + 5;
    e da nessuna parte hai dato un valore a $var2 avrai un problema, perché PHP non sa quanto vale $var2
    $var1 però anche se non l'avevi inizializzata da nessuna parte non da problemi, perché per come la si sta usando non importa il suo valore, ci si scrive solo dentro, non viene letta.
    Questo è ciò che accade nel foreach() $key e $value vengono prima scritte dalla funzione, poi verranno lette all'interno della funzione, quindi non importa il loro valore iniziale, si possono usare senza averle dichiarate da nessuna parte.

    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
    Sì, mi riferisco a quel pezzo di codice.
    Ultima modifica di Alhazred; 12-08-2016 a 12:17

  8. #18
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    si in quest'occasione $var1 = $var2 + 5 si deve valorizzare $var2, come poi ho fatto anche io nei miei tentativi.


    Ma risolvere come stavo tentando io cioè con i confronti e le variabili d'appoggio non si può proprio?

    Lo chiedo non perchè non voglio ampliare i miei orizzonti, ma solo per sapere se avevo delle chance o no

  9. #19
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Certo che si può, ma risulta molto più complicato stare dietro a tutto.

  10. #20
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Certo che si può, ma risulta molto più complicato stare dietro a tutto.
    esatto

    il problema che mi pongo nella programmazione, per cui non ne volevo sapere nulla e che mi ha portato a non lavorare per due/tre anni , era che devi tenere a mente tremila cose che non so gestire tutte e perdo le giornate intere senza risolvere, ed io che tengo alle cose a fine giornata sono distrutto e demoralizzato.

    Io infatti nel primo post, volevo proprio chiedere di capire come bisogna ragionare riga di codice per riga di codice per poter programmare con una certa filosofia ("dividi et impera") e non perdermi in ragionamenti che non portano a nulla

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 © 2024 vBulletin Solutions, Inc. All rights reserved.