Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di oldfox
    Registrato dal
    Mar 2012
    Messaggi
    50

    fare la media di alcuni elementi di array

    chi mi aiuta in questa funzione?

    ho un array composto da numeri.
    gli elementi di questo array contengono 4 valori misurati ogni giorno e in un mese
    vanno dunque da 1 a 120 (se il mese è 30gg, oppure fino a 124 per 31gg o meno per 28 o 29gg....)

    io dovrei raggruppare i valori a gruppi di 4, sommare questi 4 valori e dividere la somma per 4
    cosi da avere una media giornaliera

    poi ricomporre un array che sara' formato da 30 valori (o 31 o 28 o 29 a seconda del mese)

  2. #2
    Potresti spiegarti meglio perchè non ho capito bene cosa vuoi fare..

  3. #3
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,655
    Ciao, potresti fare cosi':
    partendo dal presupposto che il tuo array non e' multidimensionale ....
    Codice PHP:
    $array_grp_4 array_chunk $array);//dall'array singolo diventa un array multidimensionale a 4 chaivi(ogni 4 ) 

    $somme = array();
    foreach (
    $array_grp_4 as $ar){
    $somme[]=somma($ar); //cilco per sommare i valori nei blocchi da 4
    }

    print_r($somme);

    function 
    somma($array){
    $tot array_sum($array);
    return 
    $media $tot/4;


  4. #4
    Per come avevo capito io lui dovrebbe avere un array multidimensionale formato da 31 array che hanno 4 elementi, ecco perchè gli ho chiesto di spiegarsi meglio..

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Anchio non capisco bene cosa intendi comunque per quello che vuoi fare basterebbe fare cosi
    (base teorica grezza )

    Codice PHP:
    //semplice array multidimensionale dei giorni dove ogni giorno è un gruppo di 4
    $elementi = array(array("5","6","8","3"),array("2","3","9","5"),array("7","8","4","3")); 
    //risultati della media
    $risultati = array(); 

    foreach(
    $elementi as $elemento){ 
    //azzero l'eventuale somma o setto $giorno
      
    $giorno 0
      
    //sommo i valori di ogni gruppo di 4
       
    for($i=0;$i<4;$i++){ 
       
    $giorno +=$elemento[$i]; 
       if(
    $i==3){ 
           
    //$risultati sarà in ordine numerico con la media di ogni gruppo
              
    $risultati[] = $giorno 4;
        } 
       }
     } 

    //output: array(3) { [0]=> float(5.5) [1]=> float(4.75) [2]=> float(5.5) }
    var_dump($risultati); 
    Ovviamente $elementi saranno i giorni a gruppi di 4 per ognuno di essi e $risultati
    sarà automaticamente in ordine numerico

    Edit: corretto lo script e aggiunti i commenti mi ero un po confuso

  6. #6
    Utente di HTML.it L'avatar di oldfox
    Registrato dal
    Mar 2012
    Messaggi
    50
    grazie delle risposte...
    ora provo i codici...

    comunque mi spiego meglio

    l'array è monodimensionale.

    questo array viene creato a partire da valori rilevati ogni 6 ore.
    ogni giorno si aggiungono quindi 4 valori fino a completare un mese
    (quindi 4 al giorno moltiplicato 30 o 31 o 28 o 29)

    i valori presenti nell'array, a seconda del giorno del mese in cui siamo,
    variano da 4 (il giorno 1) a 124 (il giorno 31, se il mese è di 31)
    se oggi è il 17 ad esempio, nell'array avro' 17x4 valori

    io devo fare la media giornaliera di questi valori...
    sempre considerando oggi il 17,
    nell'array ho 68 valori (17*4)
    devo condiderarli a gruppi di 4
    ho quindi 17 gruppi di 4
    di ogni gruppo devo farne la somma
    (mettiamo che il primo gruppo si formato dai valori 10,20,30,40)
    la somma sara' 100
    divido la somma per 4 e ottengo 25 che è la media giornaliera
    ora (sempre se oggi è il 17)
    ottengo cosi 17 valori medi giornalieri
    con questi faccio un nuovo array di 17 valori...

    spero di aver spiegato meglio....che dite?

  7. #7
    Utente di HTML.it L'avatar di oldfox
    Registrato dal
    Mar 2012
    Messaggi
    50
    come ho detto prima l'array è monodimensionale

    pero' se all'array iniziale applico la array_chunk 4
    faccio un array multidimensionale formato da elementi di 4

    dimeti voi come è piu semplice.....
    posso fare in entrambi i modi

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Originariamente inviato da oldfox
    come ho detto prima l'array è monodimensionale

    pero' se all'array iniziale applico la array_chunk 4
    faccio un array multidimensionale formato da elementi di 4

    dimeti voi come è piu semplice.....
    posso fare in entrambi i modi
    Io ti consiglio di utilizzare l'array_chunk, multidimensionale è piu semplice
    da gestire e più ordinato

  9. #9
    Utente di HTML.it L'avatar di oldfox
    Registrato dal
    Mar 2012
    Messaggi
    50
    grazie marco80
    col tuo script ho ottenuto cio che volevo....

    ho provato anche quello di roteam
    ma mi da un ciclo quasi infinito......

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Originariamente inviato da oldfox
    grazie marco80
    col tuo script ho ottenuto cio che volevo....

    ho provato anche quello di roteam
    ma mi da un ciclo quasi infinito......
    Come lo avresti provato? Comunque non è assolutamente infinito O.ò, ho postato anche l'output che mi è venuto col var_dump sull'array

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.