Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922

    aggiungere elementi mancanti a una matrice

    Ciao a tutti. Avendo una matrice del genere come punto di partenza:

    Array
    (
    [societa1] => Array
    (
    [2] => 80
    [4] => 120
    [10] => 250
    )

    [societa2] => Array
    (
    [1] => 300
    [2] => 200
    )

    [societa3] => Array
    (
    [1] => 150
    )

    )

    Come faccio ad aggiungere gli zeri per tutti gli indici da 1 a 12 non presenti e ottenere quindi

    Array
    (
    [societa1] => Array
    (
    [1] => 0
    [2] => 80
    [3] => 0
    [4] => 120
    [5] => 0
    [6] => 0
    [7] => 0
    [8] => 0
    [9] => 0
    [10] => 250
    [11] => 0
    [12] => 0
    )

    [societa2] => Array
    (
    [1] => 300
    [2] => 200
    [3] => 0
    [4] => 0
    ....
    )
    eccetera
    )

    Per un singolo array farei così
    Codice PHP:
    $societa1 = array(=> 80=> 12010 => 250);
    for (
    $i 1$i <13$i++)
    if (!
    array_key_exists($i,$societa1) )
    $societa1[$i] = 0;
    ksort($societa1);
    echo 
    '<pre>';
    print_r($societa1);
    echo 
    '</pre>'
    ma con la matrice sto pasticciando non poco.
    Mi date un consiglio?

  2. #2
    Utente di HTML.it L'avatar di Avalox
    Registrato dal
    Nov 2003
    Messaggi
    302
    Se consideri la matrice come un array di array, è presto detto...
    Codice PHP:
    // definisci $numero_righe e $numero_colonne della tua matrice

    for($k=0;k<$numero_righe;k++) {
      for (
    $i 0$i $numero_colonne$i++) {
        if (!
    array_key_exists($i,$matrice[$k]) )
           
    $matrice[$k][$i] = 0;
      }

    Fammi sapere


  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Grazie per la risposta Avalox però non riesco ad adattare il tuo codice alla mia situazione. Fai conto che io abbia una matrice del genere, risultato di una query.

    echo $clienti["societa1"][2]; // 80
    echo $clienti["societa1"][4]; // 120
    echo $clienti["societa1"][10]; // 250
    echo $clienti["societa2"][1]; // 300
    echo $clienti["societa2"][2]; // 200
    echo $clienti["societa3"][1]; // 150

    Come risolvo?

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Non puoi prima creare la matrice (di tutti 0) e poi copiarvi i dati nelle posizioni utili?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da Andrea1979
    Non puoi prima creare la matrice (di tutti 0) e poi copiarvi i dati nelle posizioni utili?
    Potrebbe essere un'idea. Adesso provo a vedere se riesco a risolvere nel modo che suggerisci. Grazie.

    Comunque se sapete come risolvere il mi problema specifico senza aggirarlo non esitate.

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Veramente il mio non è aggirare il problema, anzi... è alla base dalla programmazione l'aver inizializzato tutte le variabili onde evitare situazioni impreviste.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Allora, provo a riformulare la domanda spiegando meglio la situazione.

    Faccio questa query.
    codice:
    select cliente,sum(importo) as importo,left(i_data,7) as mese_anno 
    from importitotali group by cliente,left(i_data,7),mese_anno
    having left(mese_anno,4) = "2006"
    order by cliente,mese_anno asc
    che mi restituisce i totali degli importi mensili. Un esempio di dati estratti è questo
    codice:
    cliente      importo   mese_anno
    società1       50      2006-02
    società1      400      2006-04
    società1      250      2006-10   
    società2      112      2006-01
    società2      200      2006-02
    società3      150      2006-01

    A questo punto io voglio ottenere una visualizzazione come questa


    codice:
    mese       società1      società2    società3
    1                             112       150
    2               50            200
    3                
    4               400
    5                
    6
    7
    8
    9
    10              250
    11
    12
    Avevo pensato di crearmi un array ($clienti), che mi restituisce una struttura come quella postata prima. Ovviamente qualsiasi soluzione anche differente mi va benissimo.
    Non riesco a venirne a capo.
    Codice PHP:
    while ($row mysql_fetch_assoc($query) ){
    $cliente $row['cliente'];
    $importo $row['importo'];
    $mes substr($row['mese_anno'],-2,2);
    $mes preg_replace("/^0/",'',$mes);
    $clienti[$cliente][$mes] = $importo;


  8. #8
    Utente di HTML.it L'avatar di Enoa
    Registrato dal
    Jul 2005
    Messaggi
    573
    Se ho capito bene:

    Codice PHP:

    //array di prova
    $clienti["societa1"][2]= 80;
    $clienti["societa1"][4]= 120;
    $clienti["societa1"][10]= 250;
    $clienti["societa2"][1]= 300;
    $clienti["societa2"][2]= 200;
    $clienti["societa3"][1]= 150;

    foreach(
    $clienti as $k => $v){
        for(
    $i=1$i<=12$i++){
            if(!isset(
    $v[$i])){
                
    $clienti[$k][$i]=0;
            }
        }
        
    ksort($clienti[$k]);//non so se ti è utile
    }
    echo
    '<pre>';
    print_r($clienti);
    echo
    '</pre>'

  9. #9

    ..................

    Ciao.
    Un problema alla volta (non posso testare il codice)
    farei un foreach sulla matrice per vedere con max()
    il valore massimo dell'array e quindi saprei quante
    chiavi dovrei aggiungere .............




    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  10. #10

    ............

    Da controllare:
    Codice PHP:
    <?php
    $clienti
    ["societa1"][2]= 80;
    $clienti["societa1"][4]= 120;
    $clienti["societa1"][10]= 250;
    $clienti["societa2"][1]= 300;
    $clienti["societa2"][2]= 200;
    $clienti["societa3"][1]= 150
    $nested 0;
    $tmpArray = array();
    $newArray = array();
    $max "";
    foreach(
    $clienti as $key => $value)
    {
        
    $tmpArray array_keys($value);
        
    $max max($tmpArray);
        
        for(
    $i 0$i $max+1$i++)
        {
            if(!isset(
    $clienti[$key][$i]))
            {
                
    $newArray[$key][$i] = 0;
            }
            else
            {
                
    $newArray[$key][$i] = $clienti[$key][$i];
            }
        }
    }
    print_r($newArray);
    ?>
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

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.