Visualizzazione dei risultati da 1 a 3 su 3

Discussione: PHP ed EXCEL

  1. #1
    Utente di HTML.it L'avatar di Valeria89
    Registrato dal
    Apr 2015
    residenza
    Pisa
    Messaggi
    129

    PHP ed EXCEL

    Salve a tutti

    Ho questa "matrice simmetrica" in Excel:

    excel.jpg

    Questa tabella rappresenta le combinazioni possibili di valori. Per esempio la combinazione tra il valore "2" e "1a" non è possibile. Se la combinazione non è possibile nella tabella c'è "0" altrimenti c'è "1".

    Adesso per controllare l'esattezza di queste combinazioni utilizzo tanti "IF/ELSE".

    E' possibile fare questa serie di controlli utilizzando direttamente il file excel? Come dovrei fare?

    Grazie a tutti.

  2. #2
    Ciao,
    ma puoi trasformare il file excel in un csv?
    In questo caso ho creato questa soluzione che farebbe al caso tuo, compresa di test di debug alla fine:
    Codice PHP:
    <?php
        $elenco 
    = array();
        
        
    $contaRighe 0;
        if ((
    $handle fopen('griglia.csv''r')) !== FALSE) {
            while ((
    $data fgetcsv($handle1000",")) !== FALSE) {
                
    $contaRighe++;
                if(
    $contaRighe == 1){//salta la prima riga perché è un'intestazione, comunque la memorizza in un array per usare le sigle successivamente
                    
    $elencoSigle $data;
                    continue; 
                }
                if(!isset(
    $elenco[$data[0]])){
                    
    $elenco[$data[0]] = array();
                }
                
    $num count($data);
                for (
    $c=1$c<$num$c++) {
                    if(!empty(
    $data[$c]) && $data[$c] == 1){
                        
    $elenco[$data[0]][] = $elencoSigle[$c];
                        
    //queste tre righe rendono l'indice disponibile anche nella matrice opposta; sono superflue ma agevolano il controllo successivo
                        
    if(!isset($elencoSigle[$data[$c]])){
                            
    $elenco[$elencoSigle[$c]] = array();
                        }
                        
    $elenco[$elencoSigle[$c]][] = $data[0];
                    }
                }
            }
        }
        
    //TEST VARI
        
    echo '<pre>';
        
    print_r($elenco);
        echo 
    '</pre>';
        echo 
    'test per 1a-1d:<br />';
        if(
    in_array('1a',$elenco['1d'])){
            echo 
    'Positivo';
        }
        else{
            echo 
    'negativo';
        }
        echo 
    '<br /> <hr /> <br />';
        echo 
    'test per 1c-2a:<br/>';
        if(
    in_array('1c',$elenco['2a'])){
            echo 
    'Positivo';
        }
        else{
            echo 
    'negativo';
        }
        echo 
    '<br /> <hr /> <br />';
        echo 
    'test per 1b-2c:<br />';
        if(
    in_array('2c',$elenco['1b'])){
            echo 
    'Positivo';
        }
        else{
            echo 
    'negativo';
        }
        echo 
    '<br /> <hr /> <br />';
    ho chiamato il file 'griglia.csv' e ho fatto un test, mi funziona bene.
    Se non puoi trasformalo in csv puoi comunque adattare lo script.
    Ho fatto in modo che funzioni in tutte e due le direzioni: se devi verificare 2c-1b, puoi fare
    Codice PHP:
     if(in_array('2c',$elenco['1b'])){ 
    oppure
    Codice PHP:
     if(in_array('1b',$elenco['2c'])){ 
    è indifferente.

    Pensate i programmi a librerie, e innalzate il livello d'astrazione

  3. #3
    Utente di HTML.it L'avatar di Valeria89
    Registrato dal
    Apr 2015
    residenza
    Pisa
    Messaggi
    129
    Quote Originariamente inviata da Infocurci Visualizza il messaggio
    Ciao,
    ma puoi trasformare il file excel in un csv?
    In questo caso ho creato questa soluzione che farebbe al caso tuo, compresa di test di debug alla fine:
    Codice PHP:
    <?php
        $elenco 
    = array();
        
        
    $contaRighe 0;
        if ((
    $handle fopen('griglia.csv''r')) !== FALSE) {
            while ((
    $data fgetcsv($handle1000",")) !== FALSE) {
                
    $contaRighe++;
                if(
    $contaRighe == 1){//salta la prima riga perché è un'intestazione, comunque la memorizza in un array per usare le sigle successivamente
                    
    $elencoSigle $data;
                    continue; 
                }
                if(!isset(
    $elenco[$data[0]])){
                    
    $elenco[$data[0]] = array();
                }
                
    $num count($data);
                for (
    $c=1$c<$num$c++) {
                    if(!empty(
    $data[$c]) && $data[$c] == 1){
                        
    $elenco[$data[0]][] = $elencoSigle[$c];
                        
    //queste tre righe rendono l'indice disponibile anche nella matrice opposta; sono superflue ma agevolano il controllo successivo
                        
    if(!isset($elencoSigle[$data[$c]])){
                            
    $elenco[$elencoSigle[$c]] = array();
                        }
                        
    $elenco[$elencoSigle[$c]][] = $data[0];
                    }
                }
            }
        }
        
    //TEST VARI
        
    echo '<pre>';
        
    print_r($elenco);
        echo 
    '</pre>';
        echo 
    'test per 1a-1d:<br />';
        if(
    in_array('1a',$elenco['1d'])){
            echo 
    'Positivo';
        }
        else{
            echo 
    'negativo';
        }
        echo 
    '<br /> <hr /> <br />';
        echo 
    'test per 1c-2a:<br/>';
        if(
    in_array('1c',$elenco['2a'])){
            echo 
    'Positivo';
        }
        else{
            echo 
    'negativo';
        }
        echo 
    '<br /> <hr /> <br />';
        echo 
    'test per 1b-2c:<br />';
        if(
    in_array('2c',$elenco['1b'])){
            echo 
    'Positivo';
        }
        else{
            echo 
    'negativo';
        }
        echo 
    '<br /> <hr /> <br />';
    ho chiamato il file 'griglia.csv' e ho fatto un test, mi funziona bene.
    Se non puoi trasformalo in csv puoi comunque adattare lo script.
    Ho fatto in modo che funzioni in tutte e due le direzioni: se devi verificare 2c-1b, puoi fare
    Codice PHP:
     if(in_array('2c',$elenco['1b'])){ 
    oppure
    Codice PHP:
     if(in_array('1b',$elenco['2c'])){ 
    è indifferente.

    Grazie, sei stato di grande aiuto

Tag per questa discussione

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.