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

    metodo per filtrare nome di un file

    ciao a tutti
    Ho questo dilemma che non sono ancora riuscito a risolvere.
    Praticamente, interrogando il database, ho una serire di filenames all'interno di un array.

    Questi filenames hanno unna struttura del tipo@
    codice:
    GRUPPO1                            GRUPPO2
    AB1.1_filename1                  BB1.1_filename1
    AB1.2_filename2                  BB1.2_filename2
    AB1.2_filename3                  BB2.3_filename3
    AB1.3_filename1                  BB2.4_filename4
    AB2.1_filename5                  BB2.4_filename5
    AB2.2_filename6                  BB2.4_filename6
    AB2.2_filename9                  
    
    GRUPPO3                            GRUPPO4                
    A1.1_filename1                   AB1_filename1
    A1.2_filename2                   AB2_filename2
    A1.3_filename3                   CE1_filename5
    A2.1_filename4                   
    A2.2_filename5                   
    
    GRUPPO5
    A_filename1
    A_filename2
    A_filename3
    B_filename1
    B_filename2
    C_filename1
    ... e cosi via.
    Adesso, quello che mi interessa filtrare e' tutto cio che precede l'underscore (_)
    il modo in cui vorrei filtrarti e' contare quanti di loro hanno lo stesso suffisso.
    Il risultato del filtro dovrebbe restituire:
    ABx.x=7
    BBx.x=6
    Ax.x=5
    ABx=3
    A=3
    B=2
    C=1

    Praticamente somma tutte le corrispondenze di AB che hanno la struttura n.n e le somma, e cosi per tutte le altre .
    Ma non so come effettuare l'espressione regolare oppure il meccanismo che mi consenta ti fare questo..
    Qualcuno potrebbe darmi una mano ??

    grazie in anticipo per l'aiuto.
    Nulla è impossibile. Il difficile è trovare la soluzione che renda l'impossibile possibile...
    http://www.eternaldream.it

  2. #2
    Ciao.
    Puoi provare con explode per l'underscore
    ciclare con ord per vedere se è una lettera
    una cosa del genere
    Codice PHP:
    if (ord($str) >9
    (è il pezzo + incasinato)
    e poi usare array_intersect
    Guarda un po cosa riesci a fare.

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

  3. #3
    Utente di HTML.it L'avatar di marco80
    Registrato dal
    May 2005
    Messaggi
    1,357
    Codice PHP:
    $array = array('aa_1','aa_2','aa_3','aa_4','ab_1','ab_2','ab_3','ac_1','ac_2','ac_3','ad_1','ad_2');
    $newArray = array();
    $i=0;
    foreach(
    $array as $file){
    $i++;

    $prefissoName array_shift(explode('_',$file));
    $newArray[$i] = $prefissoName;
    //$newArray contiene tutti i prefissi dei file (prima di _ )
    }
    $newArrayUnique array_unique($newArray); //elimino i prefissi doppi dall'array

    //cilco l'array con i prefissi unici e controllo per ogni prefisso le corrispondnze in quello originale
    foreach($newArrayUnique as $prefisso){
    $i=0;
    foreach(
    $newArray as $valore){
    if(
    $prefisso == $valore){
    $i++;
    }
    }
    $prefissoCount[$prefisso] = $i;

    L'ho fatto al volo xhce' ho poco tempo.. vedi se va bene.
    prova il
    Codice PHP:
      var_dump($prefissoCount); 

  4. #4
    Rettifico per togliere i numeri
    usa una cosa del genere
    Codice PHP:
    $a = array('A1.1','A1.2','A1.3','A1.4');
    foreach(
    $a as $value){
    for(
    $i=0;$i<strlen($value);$i++) {
         if (
    ord($value[$i]) >57){echo $value[$i]; }
      }

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

  5. #5
    grazie molte per la risposta immediata.
    Lo script che mi hai mandato e molto visino a quello che voglio raggiungere, ed il concetto e' esatto. Ma il risultato che dev oraggiungere e' leggermente diverso.

    Ho visto che lo script conta quandi suffissi uguali ci sono, ma il problema e' che al momento conta quelli ceh sono esattamente uguali.

    Per esempio:

    se io un'array tipo :
    $array=array(
    "PE1.1_fn0",
    "PE1.2_fn0",
    "PE1.3_fn0",
    "PE1.4_fn0",
    "PE1.5_fn0",
    "PE2.3_fn0",
    "PE2.4_fn0",
    "PE2.5_fn0",
    "PE2.6_fn0",
    "PE3.1_fn0",
    "PE5.4_fn0",
    "PE5.1_fn0",
    "AB1.1_fn0",
    "AB1.2_fn0",
    "AB1.3_fn0",
    "AB2.1_fn0",
    "AB2.2_fn0",
    "AB2.3_fn0",
    "AB2.4_fn0",
    "A1.1_fn0",
    "A1.2_fn0",
    "A1.3_fn0",
    "A1.4_fn0",
    "A2.7_fn0",
    "A3.1_fn0",
    "A3.2_fn0",
    "A3.3_fn0",
    "A_fn0",
    "A_fn1",
    "A_fn2",
    "B_fn1",
    "C_fn1",
    "C_fn2",
    );
    lo script mi restituisce un'array con tutti valori sopra elencati, mentre quello che devo raggiungere euna cosa del tipo:

    // x.x sarebbe 1.1, 1.2, 1.3, 2.1,2,2 e cosi via
    PEx.x=12 // ossia mi conta quanti elementi che hanno x.x e che iniziano con PE ci sono dentro l'array

    oppure
    ABx.x=7

    oppure Ax.x=8

    oppure ancora
    A=3
    B=1
    C=2

    Questi sono i risultati che poi andrei a stampare in un select box.
    Spero di essermi spiegato bene.

    Grazie ancora per l'aiuto
    Nulla è impossibile. Il difficile è trovare la soluzione che renda l'impossibile possibile...
    http://www.eternaldream.it

  6. #6
    Whisper
    Devo cercare di essere il piu flessibile possibile con il filtraggio di tutto quello ceh c'e' prima dell'underscore.

    il tuo codice mi cerca l'ASCII di A, che non va bene se dovessero esserci tipo AB oppure C oppure EE e cosi via
    Nulla è impossibile. Il difficile è trovare la soluzione che renda l'impossibile possibile...
    http://www.eternaldream.it

  7. #7
    Codice PHP:
    <?php
    $array 
    = array("PE1.1_fn0",
    "PE1.2_fn0",
    "PE1.3_fn0",
    "PE1.4_fn0",
    "PE1.5_fn0",
    "PE2.3_fn0",
    "PE2.4_fn0",
    "PE2.5_fn0",
    "PE2.6_fn0",
    "PE3.1_fn0",
    "PE5.4_fn0",
    "PE5.1_fn0",
    "AB1.1_fn0",
    "AB1.2_fn0",
    "AB1.3_fn0",
    "AB2.1_fn0",
    "AB2.2_fn0",
    "AB2.3_fn0",
    "AB2.4_fn0",
    "A1.1_fn0",
    "A1.2_fn0",
    "A1.3_fn0",
    "A1.4_fn0",
    "A2.7_fn0",
    "A3.1_fn0",
    "A3.2_fn0",
    "A3.3_fn0",
    "A_fn0",
    "A_fn1",
    "A_fn2",
    "B_fn1",
    "C_fn1",
    "C_fn2",);

    $keys = array();

    foreach(
    $array as $each)
    {
        
    $prefix preg_replace("([^A-Z\.]+)""x"array_shift(explode("_"$each)));
        
    $keys[] = $prefix;
    }

    print 
    "<pre>";
    print_r(array_count_values($keys));

    ?>

  8. #8
    Cubalibre
    Questo era esattamente quello che volevo fare.
    Ti ringrazio moltissimo per l'aiuto.
    Mi sento abbastanza ignorante in questo momento, leggendo il codice che hai scritto e relaizare che alla fine erano soltanto 4 linee di codice !!

    Ho bisogno di studiare un po di piu.

    Di nuovo grazie mille.
    Nulla è impossibile. Il difficile è trovare la soluzione che renda l'impossibile possibile...
    http://www.eternaldream.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.