Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Transposizione di 90' di una tabella

    Allora, inizio con un

    Ho un problema: devo transporre una tabella, ovvero ruotarla di 90', 180' o 270'

    Mi spiego meglio

    Data una tabella tipo (4 x 3)

    A1 B1 C1 D1
    A2 B2 C2 D2
    A3 B3 C3 D3

    ottenuta con...
    Codice PHP:
    $table = array();
    $table[101][21] = "A1";
    $table[101][22] = "B1";
    $table[101][23] = "C1";
    $table[101][24] = "D1";

    $table[102][21] = "A2";
    $table[102][22] = "B2";
    $table[102][23] = "C2";
    $table[102][24] = "D2";

    $table[103][21] = "A3";
    $table[103][22] = "B3";
    $table[103][23] = "C3";
    $table[103][24] = "D3"
    Vorrei riuscire ad applicargli una funzione che mi dia in output una tabella tipo (3 x 4) trasposta di 90' (chiavi & valori):

    A3 A2 A1
    B3 B2 B1
    C3 C2 C1
    D3 D2 D1

    Codice PHP:
    $newtable[21][101] = "A3";
    $newtable[21][102] = "A2";
    $newtable[21][103] = "A1";

    $newtable[22][101] = "B3";
    $newtable[22][102] = "B2";
    $newtable[22][103] = "B1";

    $newtable[23][101] = "C3";
    $newtable[23][102] = "C2";
    $newtable[23][103] = "C1";

    $newtable[24][101] = "D3";
    $newtable[24][102] = "D2";
    $newtable[24][103] = "D1"
    E di nuovo, riapplicandola per la seconda volta sulla tabella di cui sopra vorrei ottenere:

    D3 C3 B3 A3
    D2 C2 B2 A2
    B3 B2 B1 A1

    Spero di essere stato spiegato, altrimenti sono a disposizione per ogni dettaglio.
    In altri termini alla terza trasposizione (o rotazione, se preferite) dovrei ottenere la tabella di partenza.

    Anticipatamente grazie a tutti!
    Stefano
    Il saggio coltiva Linux poichè Windows si pianta da solo

  2. #2
    ueila... vi ho messo alla prova?!?

    Ste
    Il saggio coltiva Linux poichè Windows si pianta da solo

  3. #3
    Utente di HTML.it L'avatar di zakros
    Registrato dal
    Oct 2000
    Messaggi
    509
    Sono sempre 4 x 3 le tabelle?
    Devi usare x forza un arrary bidimensionale?
    altrimenti nn sarebbe difficile con l indice che indica le coordinate :

    $table = array();
    $table[11]= "A1";
    $table[12] = "B1";
    $table[13] = "C1";
    $table[14] = "D1";

    $table[21] = "A2";
    $table[22] = "B2";
    $table[23] = "C2";
    $table[24] = "D2";

    $table[31] = "A3";
    $table[32] = "B3";
    $table[33] = "C3";
    $table[34] = "D3";

  4. #4
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Usa MatLab che fai prima ^,^

    [.:: JaguarXF ::.]
    __________________

  5. #5
    Probabilmente c'era un modo piu' intelligente e soprattutto elegante, ma l'importante e' che ho ottenuto quel che cercavo.
    Servisse... fatene un buon uso!

    Codice PHP:
    function Transpose($grid$degree) {
      
    $loop = (int) $degree 90;
      for (
    $drg=0$drg<$loop$drg++) {
        
    ksort ($grid);
        
    $rows array_unique(array_keys($grid));
        
    sort($rows);
        
    $r_rows array_reverse($rows);
        
    $rows array_flip($rows);
        
    $output = array();
        
    reset($grid);
        while (list(
    $r$rval) = each ($grid)) {
          
    reset($rval);
          
    $kc $r_rows[$rows[$r]];
          while (list(
    $c$cval) = each($rval)) {
            
    $kr $c;
            
    $kc $r_rows[$rows[$r]];
            
    $output[$kr][$kc] = $cval;
            
    ksort($output[$kr]);
          }
        }
        
    ksort($output);
        
    $grid $output;
      }
      return(
    $grid);

    Ad ogni modo grazie!
    Stefano
    Il saggio coltiva Linux poichè Windows si pianta da solo

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.