Pagina 2 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 38

Discussione: Lite con array :-)

  1. #11
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    si che si può fare, è quello che ti ho proposto dall'inizio ma il mio codice aveva un errore (quello che ti ho proposto di correggere)
    qui di seguito con la modifica
    Codice PHP:
    <pre>
    <?php
    $dir 
    dirname(__FILE__)."/file/*.txt"


    $out_array = array();
    foreach(
    glob($dir) as $file) {
        
    $fp fopen($file,'r'); 
        
    $count 1
            while ((
    $data fgetcsv($fp,0,'|')) !== FALSE) {
                foreach (
    $data as $value) {
                    
    $out_array[$data[0]][] = $value;
                }
                   
               
    //    $count++;
       





    }  
    print_r($out_array);  
    ?>
    comunque devi risolvere il problema del posizionamento dei campi nei sottoarray, dato che questi possono variare (ad esempio, dati relativi ad un codice non presente in un file, differenze nell'ordine di elaborazione dei file...)
    dovresti provare a mettere come chiave dei valori un qualcosa tipo "fileSorgente_nomeCampo" oppure solo il nomeCampo se lo stesso è univoco

  2. #12
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    28
    Quote Originariamente inviata da clasku Visualizza il messaggio
    si che si può fare, è quello che ti ho proposto dall'inizio ma il mio codice aveva un errore (quello che ti ho proposto di correggere)
    qui di seguito con la modifica
    Codice PHP:
    <pre>
    <?php
    $dir 
    dirname(__FILE__)."/file/*.txt"


    $out_array = array();
    foreach(
    glob($dir) as $file) {
        
    $fp fopen($file,'r'); 
        
    $count 1
            while ((
    $data fgetcsv($fp,0,'|')) !== FALSE) {
                foreach (
    $data as $value) {
                    
    $out_array[$data[0]][] = $value;
                }
                   
               
    //    $count++;
       





    }  
    print_r($out_array);  
    ?>
    comunque devi risolvere il problema del posizionamento dei campi nei sottoarray, dato che questi possono variare (ad esempio, dati relativi ad un codice non presente in un file, differenze nell'ordine di elaborazione dei file...)
    dovresti provare a mettere come chiave dei valori un qualcosa tipo "fileSorgente_nomeCampo" oppure solo il nomeCampo se lo stesso è univoco
    Ok, ora funge infatti... grazie. Effettivamente nei file mancano dei valori, in alcuni manca il link alle immagini, in altri la descrizione... Mi sta facendo impazzire! Forse mi conviene abbandonare gli array e riprendere in mano le query? Li effettivamente è più facile... Consigli?

    Grazie

  3. #13
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Esattamente, cosa vuoi ottenere come risultato finale?

  4. #14
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    28
    Quote Originariamente inviata da clasku Visualizza il messaggio
    Esattamente, cosa vuoi ottenere come risultato finale?
    Un bel file txt pulito... con i campi che voglio io! Mi serve per darlo in pasto a Prestashop!
    Il problema è che l'azienda fornitrice ha tutti i file separati, mi piacerebbe prendere ogni singolo file, confrontarlo con quello definitivo e se mancano dati aggiungerli... Considera che ogni file ha circa 10000 record. Esattamente sono 5 file che devo unire. Vorrei eliminare di dati che non servono (record senza il link alle immagini e senza descrizione). Con mysql è facile, importo ogni singolo file i una tabella, faccio una query unendo le tabelle tramite codice prodotto(univoco), elimino i prodotti che non hanno link e descrizione... Il problema è la lentezza ,per questo sono passato agli array. Diciamo che con il codice che mi hai dato siamo andati avanti ma ancora non ci sono...

  5. #15
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    guarda questa versione che mette i nomi dei campi come chiavi dell'array e fa anche un altro paio di elaborazioni per l'output
    Codice PHP:
    <?php
    // !!!!
    // si parte dal presupposto che il codice è sempre il primo campo dei file e // che la prima riga dei file contenga i nomi dei campi


    $dir dirname(__FILE__)."/file/*.txt"


    // definisce l'array output dell'unione dei file
    $out_array = array();


    foreach(
    glob($dir) as $file) {
        
    $fp fopen($file,'r'); 


        
    // setta un contatore 
        
    $count 1
        
    // definisce un array per i nomi dei campi
        
    $nome_campo = array();


        while ((
    $data fgetcsv($fp,0,'|')) !== FALSE) {
            foreach (
    $data as $key => $value) {
                if(
    $count == 1) {
                    
    // se è la prima riga del file, compila l'array con i nomi dei campi e inserisce anche i dati nell'array output
                    
    $nome_campo[] = $value;
                    
    $out_array[$data[0]][$value] = $value;
                }
                else {
                    if (
    $key 0) {
                        
    // evita di duplicare il codice del prodotto per ogni file e inserisce i dati nell'array output
                        
    $out_array[$data[0]][$nome_campo[$key]] = $value;
                    }
                }
            }
            
    // incrementa il contatore
               
    $count++;
       } 




    }  


    // fa diventare l'array da bidimensionale a monodimensionale
    foreach ($out_array as $k => $c) {
        
    // usa | per suddividere i campi
        
    $final_array[] = implode('|'$c);
    }


    // questo è il risultato dell'array output
    print_r($out_array);
    // questo è il risultato dell'array dimensionale
    print_r($final_array);


    // questo è il risultato che metteresti in un file (i campi vuoti sarebbero comunque presenti, trovi due separatori consecutivi)
    echo implode("\n"$final_array);
    ?>
    attenzione: se hai un file diverso da articoli che contiene un codice articolo non presente in articoli, ti sballa tutti i campi per il codice mancante

    questa può essere una base di partenza per fare i tuoi controlli e togliere dall'array finale i dati che non ti servono

  6. #16
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    28
    Ottimo grazie. Ora ci lavoro un pò e vedo cosa riesco a realizzare... Cerco di capire come eliminare i dati che non mi servono e magari creare un'unico array decente da mettere in un file.

    Grazie :-)

  7. #17
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    nel foreach in cui si fa diventare l'array da bidimensionale a monodimensionale puoi fare i tuoi controlli, testando, ad esempio, la descrizione breve e l'url con un
    Codice PHP:
    if ($c['descrizionebreve'] != "" && $c['url'] != "" ) {
        
    $final_array[] = implode('|'$c);


  8. #18
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    28
    Ho visto che nel $final_array non inserisce il primo campo (codice), lo salta. Effettivamente nell'$out_array si vede:
    codice:
    codice
            dato1 
            dato2
            dato3
    ma nel $final parte dal dato1...

  9. #19
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    28
    Quote Originariamente inviata da myfender Visualizza il messaggio
    Ho visto che nel $final_array non inserisce il primo campo (codice), lo salta. Effettivamente nell'$out_array si vede:
    codice:
    codice
            dato1 
            dato2
            dato3
    ma nel $final parte dal dato1...
    ok, modificato l'ultima parte di script
    Codice PHP:
    // fa diventare l'array da bidimensionale a monodimensionale
    foreach ($out_array as $k => $c) {
        
    // usa | per suddividere i campi
        
    $final_array[] = implode('|'$c);

    con

    Codice PHP:
    // fa diventare l'array da bidimensionale a monodimensionale
    foreach ($out_array as $k => $c) {
        
    // usa | per suddividere i campi
        
    $final_array[$k] = implode('|'$c);


  10. #20
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    ho fatto una ca**ta a togliere il codice dai sottoarray, è meglio se correggi la parte di codice in cui è scritto
    if ($key > 0) {
    // evita di duplicare il codice del prodotto per ogni file e inserisce i dati nell'array output

    è solo una complicazione inutile quando vai a fare l'output
    Ultima modifica di clasku; 30-08-2014 a 20:09

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 © 2026 vBulletin Solutions, Inc. All rights reserved.