Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    387

    Aggiungere chiavi e valori "mancanti" ad Array e segmentarlo

    Dato questo array

    Codice PHP:
    Array
    (
        [
    09-2011] => 1
        
    [01-2012] => 1
        
    [04-2012] => 1
        
    [09-2012] => 2
        
    [10-2012] => 1
        
    [11-2012] => 98
        
    [12-2012] => 2

    (la chiave è mese/anno, potrei averla anche come YYYYMM se dovesse servire) dovrei effettuare due operazioni...

    1) Dato il mese e l'anno attuale (in questo caso 12-2012) elimina tutte le chiavi ed i rispettivi valori superiori a 12 mesi (nel caso dell'array postato, dovrebbe eliminare 09-2011 ed il 01/01/2013 eliminare anche 01-2012) [i dati vengono estratti da un MySQL]

    2) in quell'array dovrei aggiungerci, con value = 0, i mesi mancanti.

    Diciamo che dopo queste due operazioni dovrebbe venir fuori un array cosi:

    Codice PHP:
    Array
    (
        
    //[09-2011] => 1 questo valore eliminato perchè siamo a dicembre 2012
        
    [01-2012] => 1
        
    [02-2012] => // aggiunto
        
    [03-2012] => // aggiunto
        
    [04-2012] => 1
        
    [05-2012] => // aggiunto
        
    [..... taglio perchè credo sia chiaro...]
        [
    09-2012] => 2
        
    [10-2012] => 1
        
    [11-2012] => 98
        
    [12-2012] => 2

    Grazie mille e buona domenica!

  2. #2
    Ciao, non ho ben capito se vuoi eliminare i dati solo dall'array o anche dal database. Comincio a scriverti la soluzione solo per il vettore (script testato e funzionante ).

    Se usi la data nel formato YYYY-MM, ti facilita molto perché puoi usare la funzione strcmp(): in tal caso l'ordine alfabetico corrisponde all'ordine cronologico! E poi è comodo anche per come l'ho implementato qui sotto

    PS: Ti ho scritto anche la conversione da MM-YYYY a YYYY-MM e viceversa (vah che bravo che sono )

    Codice PHP:
    // Conversione MM-YYYY => YYYY-MM
    foreach(array_keys($array) as $date_mY){
        
    $date_Ym implode('-',array_reverse(explode('-',$date_mY)));
        
    $array[$date_Ym] = $array[$date_mY];
        unset(
    $array[$date_mY]);
    }    

    $y0 date('Y')-1;
    $m0 date('m');

    foreach(
    array_keys($array) as $key)
        if(
    strcmp($key"$y0-$m0") <= 0)     // mese <= 2011-12
            
    unset($array[$key]);

    $y0 .= '000';               // $y0 = '2011000';

    for($i=0$i<12$i++){
        if(!(
    $m0 $m0%12))
            
    $y0 += 1000;
        
    $m0++;
        
    $m $y0 $m0;         // per $i = 1 => $m = '2012001'
        
    $m = (string)$m;
        
    $m[4] = '-';            // per $i = 1 => $m = '2012-01'
        
    if(!isset($array[$m]))
            
    $array[$m] = 0;
    }

    /* Verifica */

    ksort($array);

    // Conversione YYYY-MM => MM-YYYY
    foreach(array_keys($array) as $date_Ym){
        
    $date_mY implode('-',array_reverse(explode('-',$date_Ym)));
        
    $array[$date_mY] = $array[$date_Ym];
        unset(
    $array[$date_Ym]);
    }    

    print_r($array);

    /***********/ 
    Buona domenica!

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    387
    Uhm...

    L'ho butto giu al volo e mi stampa anche il 13' mese....

    Codice PHP:
    Array ( 
    [
    2012-02] => 
    [2012-03] => 
    [2012-04] => 
    [2012-05] => 
    [2012-06] => 
    [2012-07] => 
    [2012-08] => 
    [2012-09] => 
    [2012-10] => 
    [2012-11] => 
    [2012-12] => 
    [2012-13] => 
    Comunque, intanto ti ringrazio, e ti dico che

    1 - sono riuscito a non tirarmi proprio fuori dal database il 13' mese indietro (diciamo quindi non ho più necessità di eliminare dall'array [e solo da lui] i "mesi in più"

    2 - l'array può essere molto dinamico... può partire da gennaio come da novembre, quindi debbo calcolarmi bene eventuali "anni" in più o in meno...

    3 - Sto cercando di lavorare su una soluzione simile: mi creo prima un array vuoto con le $key definite, le $key dovranno corrispondere all'array tirato fuori dal DB e a quel punto confronterò quelle mancanti...

    Sembra facile

  4. #4
    Ciao ho notato anch'io il 13 infatti era sbagliato, ho modificato il mio codice sopra e ora è perfetto (l'ho testato facendo finta che sia un altro mese), guardalo un po'

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    387
    OK!
    Grazie intanto...
    vedo di adattarmelo per metterlo ad appoggio di quello dal database, confrontare le chiavi ed aggiungere a quello del DB i valori mancanti...

    Se data la tua velocità hai già in mente la soluzione... te ne sarei grato

    Intanto grazie ancora e buona domenica!

  6. #6
    Originariamente inviato da webtemplum
    OK!
    Grazie intanto...
    vedo di adattarmelo per metterlo ad appoggio di quello dal database, confrontare le chiavi ed aggiungere a quello del DB i valori mancanti...

    Se data la tua velocità hai già in mente la soluzione... te ne sarei grato

    Intanto grazie ancora e buona domenica!
    Che chiavi utilizzi quindi? MM-YYYY (che tanto ti ho fatto anche la conversione ^^) o cambi tutto in YYYYMM? (ho visto l'altra discussione che hai fatto)

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    387
    Array di partenza

    Codice PHP:
    Array
    (
        [
    201201] => 1
        
    [201204] => 1
        
    [201209] => 2
        
    [201210] => 1
        
    [201211] => 98
        
    [201212] => 2

    Uso poi le substring in fase di visualizzazione

    PS a marzo del prossimo anno (ad esempio) il tuo array partirà da aprile 2012, giusto? Stavo studiandomi il tuo codice....

    Grazie ancora

  8. #8
    PS a marzo del prossimo anno (ad esempio) il tuo array partirà da aprile 2012, giusto? Stavo studiandomi il tuo codice....

    Grazie ancora
    Sìsì dovrebbe essere così se non capisci qualcosa dimmi pure ^^

  9. #9
    Originariamente inviato da ZioLuffio
    Sìsì dovrebbe essere così se non capisci qualcosa dimmi pure ^^
    Testalo cambiando i valori $y0 e $m0 prima di $y0 .= '000'; ($y0 = anno scorso, $m0 = mese attuale)

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    387
    Si, perfetto

    Sei stato gentilissimo!

    Ora mi butto a fare i confronti tra i due array (a meno che ripeto non hai tu la soluzione data la tua velocità )

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.